Silverlight中使用MVVM(1)

 

Silverlight中使用MVVM(1)--基础

Silverlight中使用MVVM(2)—提高

Silverlight中使用MVVM(3)—进阶

Silverlight中使用MVVM(4)—演练

这是我第一篇关于设计模式方面的文章,以前除了对单例模式等几个常用的模式有所研究之外,对设计模式不是太重视,总觉得要到一定的程度才需要接触,

最近的项目中使用了MVVM模式,所以这段时间查阅了大量这方面模式的文章,理论上的东西大家都说的比较好,这里我也不大谈MVVM模式的优势了,只是

美中不足的是大部分给出的示例中,对于一个没有用过MVVM模式的人而言,这些例子总是给人一种摸不着头绪的感觉,所以我想将我学习MVVM的过程一步步

写下来,希望对于和我一样,刚刚接触MVVM这个模式的人有一点点帮助。

如果你不知道MVVM模式,我建议你先了解一下MVVM模式,至少要知道实现该模式的意图是什么。

那么我主要通过我认为是已经算是比较简单的例子进行讲解这个模式,当然后面我们会在这个例子的基础上一步一步的进行扩展。

先来看一看我们的项目架构:

很典型的MVVM的分层方式

我们先来构建Model,首先在Person.cs中简单声明了一个类型

        public class Person
       {
         public int age  { get; set; }
         public string name { get; set;}
       }

类型定义好后,我们在Persons.cs中得到一个Person的集合

        public class Persons
       {
        public List<Person> person;
        public List<Person> getPerson()
        {
            person = new List<Person>()
            {
                new Person{name = "Tom",  age = 21 },
                new Person{name = "Jack", age = 22 },
                new Person{name = "Rose", age = 23 },
            };
            return person;
        }
     }

那么这里我们就简单的完成了Model的工作,下面开始完成ViewModel部分的工作

       public class PageViewModel
       {
       public List<Person> Human { get; set; }
       public PageViewModel()
       {
           Human = new Persons().getPerson();
       }
       }

ViewModel也设计的很简单,只是简单的获取了之前定义的集合。

下面就是PageView部分了,这里用DataGrid进行显示数据

          <data:DataGrid AutoGenerateColumns="False" Height="200" ItemsSource="{Binding Path=Human}" HorizontalAlignment="Left" Margin="36,51,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="200">
            <data:DataGrid.Columns>
                <data:DataGridTemplateColumn>
                    <data:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Height="23" HorizontalAlignment="Left" Name="textBlock1" Text="{Binding name}" VerticalAlignment="Top" />
                                <TextBlock Height="23" HorizontalAlignment="Left" Name="textBlock2" Text="{Binding age}" VerticalAlignment="Top" />
                            </StackPanel>
                        </DataTemplate>
                    </data:DataGridTemplateColumn.CellTemplate>
                </data:DataGridTemplateColumn>
            </data:DataGrid.Columns>
        </data:DataGrid>

这里我们将DataGrid的源设为Human,这样我们就完成了MVVM模式各个层次的初步构建,关键的问题是怎样将这几个部分有效的联系起来

我们将PageView,PageViewModel引入到MainPage中

       <UserControl x:Class="UseMVVMInApp.MainPage"
       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"
       mc:Ignorable="d"
       xmlns:viw="clr-namespace:UseMVVMInApp.View"
       xmlns:vmmodel="clr-namespace:UseMVVMInApp.ViewModel"
       d:DesignHeight="300" d:DesignWidth="400">
       <UserControl.Resources>
        <vmmodel:PageViewModel x:Key="vm"></vmmodel:PageViewModel>
       </UserControl.Resources>
        <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource vm}" >
        <viw:PageView></viw:PageView>
      </Grid>
      </UserControl>

这里的工作就是将PageViewModel声明为一个资源,然后通过页面引用它,这样就实现了我们所谓的MVVM模式。

当然了,这个例子是很简单的,似乎用MVVM模式未免小题大作,但是实际上,页面与逻辑分离的情况下,我们改动其中任何一个部分都是比较清楚的。

好吧,这篇就到这里

原文引入:http://www.cnblogs.com/626498301/archive/2010/08/17/1801475.html

最新文章

  1. SQL Server 获取最后一天(指定时间的月最后一天日期)
  2. zoj3551 Bloodsucker ——概率DP
  3. UML中的依赖关系
  4. 5.6 WebDriver API实例讲解(31-35)
  5. UVa 10935 Throwing cards away I【队列】
  6. [Java] Web开发HTTP状态码整理
  7. Java Stax操作XML简介
  8. c# try..... catch
  9. 经常会用到的js函数
  10. CodeForces 277A Learning Languages (并检查集合)
  11. 常用php时间函数用法汇总
  12. 通过银行卡号识别归属银行,php方式
  13. 项目分享:通过使用SSH框架的公司-学员关系管理系统(CRM)
  14. 通过zuul修改请求参数——对请求参数进行解密
  15. poj1742 多维背包
  16. Wild Dog sample [sync data]
  17. 用delphi检查网络连接状态3种方式
  18. hdu 4253(经典题目:二分+最小生成树)
  19. java发生邮件(转)
  20. 向 webview 添加 userScript

热门文章

  1. [MFC] CFile读写文件实现(高效)
  2. Java 并发编程中的 CountDownLatch 锁用于多个线程同时开始运行或主线程等待子线程结束
  3. STL优先队列模板
  4. python两个类之间变量和函数的调用
  5. Codeforces 12 D Ball
  6. NOIP前必须记住的30句话
  7. Java Enum枚举的用法(转)
  8. LeetCode 3_Longest Substring Without Repeating Characters
  9. memcached优化方法
  10. HDU2897( 巴什博奕变形)