原帖:http://www.cnblogs.com/starsoul/archive/2011/07/04/2097002.html
概述:
开发一个专业的应用程序软件的用户界面不容易。它可能涉及到数据融合,交互设计,可视化设计,连接,多线程,安全,国际化,验证,单元测试和可触摸技术。
我们将清楚数据模板,命令,数据绑定,资源系统和MVVM模式如何结合在一起,创建一个简单地,可测试的,强大的框架,在此框架上任何WPF程序都能存活。
演变:
MVP是Model-View-Controller模式的变种
你在屏幕上看到的是View,它所显示的数据是Model,而Presenter 把这两者连接在一起。View依赖Presenter去组装数据,和用户输入进行交互,提供输入验证(可能通过委托的模型),以及一些其他的任务。
PM模式相似于MVP,它分离出来view的行为和状态。PM模式的有趣的部分在于一个view的抽象被创建,叫做Presentation Model。View仅仅变成一个Presentation Model的一个表现。
同步的逻辑作为代码存在于Presnetation Model类里。
MVVM与Fowler的Presentation Model相同,这两个模式都有一个View的抽象,其中包含了View的状态和行为。Fowler引入Presentation Model作为一种与UI平台无关的View的抽象的创建,而Gossman引入MVVM作为一种利用WPF的核心特征去简化用户界面的创建的标准化的方式。在这个意义上,我考虑MVVM是PM模式的更一般化,是为WPF和Silverlight平台而特制的。
当用户点击View上的一个button时,ViewModel上的一个command去执行一个请求的行为。ViewModel,而不是View,执行所有模型数据的修改。
View绑定到ViewModel的属性上,这反过来,公开了在model对象里包含的数据和其他的指定到view上一些其他状态。在View和ViewModel之间的绑定被很简单地构建,因为一个ViewModel对象被设置作为一个view的DataContext。如果在ViewModel里的属性值改变,那些新的值自动地通过数据绑定传播到view。当用户点击View上的一个button时,ViewModel上的一个command去执行一个请求的行为。ViewModel,而不是View,执行所有模型数据的修改。
View类不知道model类的存在,而ViewModel和Model都不知道view。实际上,Model完全地遗忘了ViewModel和View存在的事实。这是非常松耦合的设计,你很快就能看到这在很多方面的好处。
更多的关于MVP的东西,我建议你阅读一下Jean-Paul Boodhoo's2006年8月份的设计模式专栏。August 2006 Design Patterns column.
早在2004年,Martin Fowler发表了一篇命名为Presentation Model(PM)的模式的文章Presentation Model
在Glenn Block2008年9月发表的一篇优秀的文章”Prism: Patterns for Building Composite Applications with WPF",他解释了微软WPF的组合应用程序指导。
更多的关于绑定和数据模板的知识在2008年7月的文章里,“ Data and WPF: Customize Data Display with Data Binding and WPF."。
如果你不熟悉命令,我推荐你阅读Brian Noye2008年9月发行的一篇综合性的文章“ Advanced WPF: Understanding Routed Events and Commands in WPF”
为什么WPF开发人员喜爱MVVM
WPF使得MVVM成为一个强大的模式的一个最重要的方面是数据绑定。通过一个view到Viewmodel的绑定属性,你在两者之间得到松耦合,完整地移除了在ViewModel里直接写代码更新一个view的需要。数据绑定系统也支持输入验证,提供了传递验证错误到view的标准方式。
WPF使得这个模式如此有用的其他两个特征是数据模板和资源系统。数据模板应用View到ViewModel对象显示在用户界面。你能在XAML里声明模板,让资源系统为你在运行时自动地加载和应用这些模板。
如果WPF不支持commands,MVVM模式不会如此强大。