Silverlight开发之MVVM模式

      前段时间做Silverlight开发,用到了经典的MVVM开发模式,MVVM开发模式的组织形式有多种,但是万变不离其中,就是Module-View-ViewModule的形式,下面就以一个最简单的示例来讲解一下。
首先打开VS 2010,新建一个Silverlight应用程序:
然后在LeoSLWebPart项目上建立三个文件夹,分别为:Module,View和ViewModel:
在Module文件下添加一个DataModule.cs的类文件,这个用来定义我们的Module对象,然后在里面写下如下的代码: 
View Code
1 public class DataModule
2 {
3 public string ID
4 {
5 get;
6 set;
7 }
8
9 public string Title
10 {
11 get;
12 set;
13 }
14
15 public string Name
16 {
17 get;
18 set;
19 }
20
21 public DataModule() { }
22
23 public DataModule(string id, string title, string name)
24 {
25 this.ID = id;
26 this.Title = title;
27 this.Name = name;
28 }
29 }
 再在ViewModule文件夹下添加一个名为GetDataViewModule.cs的类文件,用来获取数据,我这里只做一个简单的Demo,所以就直接赋给它一些静态的数据,代码如下:
View Code
1 public class GetDataViewModule
2 {
3 public ObservableCollection<DataModule> AllData { get; set; }
4
5 public GetDataViewModule()
6 {
7 AllData = new ObservableCollection<DataModule>();
8 LoadData();
9 }
10
11 private void LoadData()
12 {
13 AllData.Clear();
14 AllData = GetAllData();
15 }
16
17 public ObservableCollection<DataModule> GetAllData()
18 {
19 ObservableCollection<DataModule> allData = new ObservableCollection<DataModule>();
20 allData.Add(new DataModule
21 {
22 ID = "0001",
23 Title = "afda",
24 Name = "Leo"
25 });
26 allData.Add(new DataModule
27 {
28 ID = "0002",
29 Title = "aawa",
30 Name = "Edmund"
31 });
32 return allData;
33 }
34 }
然后再到View文件夹下添加一个名为DataViewPage.xaml的Silverlight页面,并且在页面里面添加一个DataGrid控件用于展示数据,在<navigation:Page>标签下添加一个引用ViewModule的语句:
xmlns:vm="clr-namespace:LeoSLWebPart.ViewModule"
然后添加如下代码,将刚刚开发的GetDataViewModule作为其静态数据源: 
<navigation:Page.Resources>
<vm:GetDataViewModule x:Key="gdvm"/>
</navigation:Page.Resources>
页面的详细代码如下:
View Code
1 <Grid x:Name="LayoutRoot" DataContext="{StaticResource gdvm}">
2 <data:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding AllData}" IsReadOnly="True" Height="200" HorizontalAlignment="Left" Margin="0,4,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="400" >
3 <data:DataGrid.Columns>
4 <data:DataGridTemplateColumn Header="ID">
5 <data:DataGridTemplateColumn.CellTemplate>
6 <DataTemplate>
7 <TextBlock Text="{Binding ID}" />
8 </DataTemplate>
9 </data:DataGridTemplateColumn.CellTemplate>
10 </data:DataGridTemplateColumn>
11 <data:DataGridTemplateColumn Header="标题">
12 <data:DataGridTemplateColumn.CellTemplate>
13 <DataTemplate>
14 <TextBlock Text="{Binding Title}" />
15 </DataTemplate>
16 </data:DataGridTemplateColumn.CellTemplate>
17 </data:DataGridTemplateColumn>
18 <data:DataGridTemplateColumn Header="姓名">
19 <data:DataGridTemplateColumn.CellTemplate>
20 <DataTemplate>
21 <TextBlock Text="{Binding Name}"/>
22 </DataTemplate>
23 </data:DataGridTemplateColumn.CellTemplate>
24 </data:DataGridTemplateColumn>
25 </data:DataGrid.Columns>
26 </data:DataGrid>
27 </Grid>

还有一步,在App.xaml.cs文件中找到Application_Startup方法,将其中的代码修改为this.RootVisual = new DataViewPage();

最后将解决方案生成,在浏览器中查看,就可以看到下图所示的结果了:

posted @ 2011-07-11 23:07  Statmoon  阅读(517)  评论(0编辑  收藏  举报