MVVM using Expression Blend


Expression Blend offers us a Project Template for creating MVVM project by default. MVVM Project template can be created by creating Silverlight Databound application.
 
Well lets create a new Silverlight Databound application as shown below.

Databound application in silverlight
 
The Blend takes care of creating a MVVM Project Template for us as shown below :

MVVM Project Template
 
Lets take a deeper look at what Blend has created for us.
 
Make note that the Important DLLs are already added for us by Blend. In Visual studio we would have to do it Manually.

DLL in MVVM Project
 
The ViewModel is created as shown below :
 
 
public class MainViewModel : INotifyPropertyChanged
        {
              
public MainViewModel()
               {
                     
// Insert code required on object creation below this point.
 
              }             
              
private string viewModelProperty = "Runtime Property Value";             
 
               /// <summary>
 
              /// Sample ViewModel property; this property is used in the view to display its value using a Binding.
 
              /// </summary>
 
              /// <returns></returns>
 
      
              
public string ViewModelProperty
               {
                     
get
 
                     {
                           
return this.viewModelProperty;
 
                     }
                     
set
 
                     {
                           
this.viewModelProperty = value;
 
                           this.NotifyPropertyChanged("ViewModelProperty");
                      }
               }             
              
/// <summary>
 
              /// Sample ViewModel method; this method is invoked by a Behavior that is associated with it in the View.
 
              /// </summary>
 
             
 
        public void ViewModelMethod()
               {
                     
if(!this.ViewModelProperty.EndsWith("Updated Value", StringComparison.Ordinal))
                      {
                           
this.ViewModelProperty = this.ViewModelProperty + " - Updated Value";
                      }
               }
              
               
#region INotifyPropertyChanged             
 
        public event PropertyChangedEventHandler PropertyChanged;
              
 
        private void NotifyPropertyChanged(String info)
               {
                     
if (PropertyChanged != null)
                      {
                            PropertyChanged(
this, new PropertyChangedEventArgs(info));
                      }
               }
              
#endregion 
        }

 
Also creates a View named as MainView.xaml for us.
 
 
<UserControl
 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 
       xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
 
       xmlns:ic="http://schemas.microsoft.com/expression/2010/interactions"
 
       xmlns:local="clr-namespace:MVVMBlend"
 
       mc:Ignorable="d"
 
       x:Class="MVVMBlend.MainView"
 
       d:DesignWidth="640" d:DesignHeight="480">
 
 
 
    <UserControl.Resources>
 
        <local:MainViewModel x:Key="MainViewModelDataSource" />
 
    </UserControl.Resources> 
 
    <Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource MainViewModelDataSource}}" d:DataContext="{d:DesignData
 /SampleData/MainViewModelSampleData.xaml}">
 
        <TextBlock Text="{Binding ViewModelProperty}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
 
 
 
        <Button Content="Update Value" Height="41" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,125,0,0">
 
            <i:Interaction.Triggers>
 
                <i:EventTrigger EventName="Click">
 
                    <ic:CallMethodAction MethodName="ViewModelMethod" TargetObject="{Binding}"/>
 
                </i:EventTrigger>
 
            </i:Interaction.Triggers>
 
        </Button>
 
    </Grid>
 </
UserControl>
 

Just select the xaml view and move to the Properties Window , you would see somethng like this.
 
We need not touch the xaml all the modifications could be done from here.
 
The below highlighted area is the place to work.

Work place in MVVM
 
Click on the icon shown below:

MVVM application
 
That would open a Create Data Binding dialog box. Modify it just like that and click ok. The xaml would be updated.

Data binding in MVVM
 
A Call is made for the MainView.xaml from the startup page MainPage.xaml.
 
 
    <Grid x:Name="LayoutRoot" Background="White">
 
        <local:MainView />
 
    </Grid>
 

Lets not modify anything for now. Lets retain the code generated by Blend.
 
Lets give it a run.

run MVVM application
 
Hit the Buttoin Update Value.

Databound application
 
This is a very simple implementation of MVVM offereed by Blend.
 
In my next post regarding this topic I would describe what other features Expression Blend offers to the Developers and how we can create Business application using Blend. Till Then Happy Coding.


Similar Articles