探秘Model-View-ViewModel设计模式

Model-View-ViewModel很多人肯定感觉不太熟悉,这里我们将介绍Model-View-ViewModel与MVC、MVP等模式的不同点,同时还要以DEMO的形式来进行开发讲解。

Model-View-ViewModel和MVC、MVP设计模式的不同点

Model-View-ViewModel设计模式是MVP设计模式与WPF技术相结合的产物,对于一些很常见的如Model-View-Controller(MVC)设计模式和Model-View-Presenter(MVP)设计模式来说,当在WPF下使用时它们都有一个很大的缺点:就是它们根本没有考虑到WPF强大的数据绑定技术。在这些模式中,Controller或者Presenter对视图的行为负责,就像填充TextBox的文本内容,加载ListBox,填充表格的内容等等。而这些在WPF中都能轻松解决,因为正好WPF最大的优点之一就是它丰富的数据绑定能力。如果在WPF中使用MVC或者MVP设计模式,就可能完全无法利用WPF中数据绑定的方便性,而Model-View-ViewModel则不一样。

Model-View-ViewModel的定义

Model-View-ViewModel设计模式最早是由John Gossman引入的,感兴趣的朋友可以看看“http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx”这篇文章。该模型提供了一个纯净的Model,创建了一个抽象的视图来容纳状态,并且数据从一个由可视化设计器创建的视图绑定到一个抽象的视图上。该可视化设计器主要是Microsoft Expression Blend工具,而这个抽象的视图则是ViewModel。关键的地方是通过数据绑定在View与ViewModel模型之间进行双向的联系。当正确地使用该设计模式后,每一个View除了纯净的XAML和非常少量的后置代码外不会再包含任何东西,彻底地做到了界面展示和业务逻辑的分离,让程序员更加专注于代码的编写。

ViewModel

ViewModel的作用是让Mdoel更加适合于View。例如你有一个返回了一个泛型集合IList 的方法,但你实际上可能还会把它转换到一个对WPF更加友好的类中以更加方便地进行数据绑定。通过ViewModel,可以把IList 类型的Model集合转换成如CollectionView之类的东西以方便WPF中的UI界面元素进行数据绑定,完成这项任务最关键的地方在于在ViewModel中暴露出一个公共的属性。和Controlller类似,ViewModel也能用来容纳View的状态以及执行View需要的任何命令。
因为WPF内置了Command模式,对于像Button控件之类的UI元素来说都有一个Command的属性,它是WPF所定义的ICommand类型。可以把这些命令放到ViewModel中并以公有属性的形式暴露出来,这样就可以让View对其进行绑定。这极其强大,因为它可以把ModelView中的可执行代码绑定到窗体的Button上。

Demo

以下是使用了Model-View-ViewModel 设计模式的一个简单的WPF应用程序例子,感兴趣的话可以下载代码看看。后台使用的是大家常见的Northwnd数据库:

相关的类关系图如下:

分享标题:探秘Model-View-ViewModel设计模式
网页路径:http://www.hantingmc.com/qtweb/news11/372161.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联