MVVM和MVVMLight框架介绍及在项目中的使用详解
一、mvvm 和 mvvmlight介绍
mvvm是model-view-viewmodel的简写。类似于目前比较流行的mvc、mvp设计模式,主要目的是为了分离视图(view)和模型(model)的耦合。
它是一种极度优秀的设计模式,但并非框架级别的东西,由mvp(model-view-presenter)模式与wpf结合的应用方式时发展演变过来的一种新型架构。
立足于原有mvp框架并且把wpf的新特性糅合进去,以应对pc端开发日益复杂的需求变化。
结构如图所示:
相对于之前把逻辑结构写在code behind 里面的方式,mvvm几乎完全解耦了视图和逻辑业务的关系,通过数据绑定和命令来处理ui属性
及事件驱动。同理,viewmodel的视图交互业务逻辑处理导致的属性变更也会通知到view前端,让view前端实时更新。model中存放数据模型和数据逻辑、业务逻辑。
其实我个人认为,数据和业务交互这一层还是应该另外独立,model中完全就是实体模型,这样更清晰。
这种类型的双向绑定非常优秀,view的变动,会自动反应到viewmodel上,反之亦然。目前js前端框架angularjs也是采用这种设计模式。
mvvm模式和mvc模式一样,主要目的是分离视图(view)和模型(model),有几大优点
1. 低耦合:视图(view)可以独立于model变化和修改,一个viewmodel可以绑定到不同的view上,当view变化的时候model可以不变,当model变化的时候view也可以不变。
2. 可重用性:可以把一些视图逻辑放在一个viewmodel里面,让很多view重用这段视图逻辑。
3. 独立开发:开发人员可以专注于业务逻辑和数据的开发(viewmodel),设计人员可以专注于页面设计,使用expression blend可以很容易设计界面并生成xml代码。
4. 可测试:界面素来是比较难于测试的,而现在测试可以针对viewmodel来写。
希望对mvvm有更进一步了解的同学可以看看这篇文章:https://www.codeproject.com/kb/wpf/wpfmvvmquickstart.aspx,
作者从mvvm的模式介绍到数据绑定、消息通知、命令等几个主要方面都有详细的说明。
如果你目前正在进行微软的 wpf 、windows phone、windows 8、silverlight相关项目的开发,我先很有必要了解一下mvvm light框架。
它轻量(相对于prism),专注(仅负责mvvm架构模式的实现,没有其他多余的组件),高效(使用简易,省时减力),能够帮助你更好的开发你的应用。
mvvmlight的作者laurent bugnion 是个微软mvp,这个是mvvmlight的官网:http://www.mvvmlight.net/,上面有详细的介绍和视频文档。
有趣的是,mvvmlight的产品logo是一根羽毛,寓意了我们上面提到的优点:轻量、专业、高效,不知道作者是不是这个意思。
二、如何在你的wpf应用中使用mvmlight
主要使用方式有两种;
一种是去官网上下载mvvmlight toolkit,安装之后,vs模板中会出现mvvmlight项目模板,你可以直接使用该项目模板来创建项目了。
里面会包含默认的viewmodellocator和mainviewmodel,mainviewmodel就是你main视图的viewmodel了,而viewmodellocator是一个全局的viewmodel加载注册器,这个第二篇会详细说到。
另一种方式就是去nuget上安装,这无疑是最便捷的事了。在nuget 工具箱上搜索 mvvm light,可以看到两个项目,一个是mvvm light , 一个是 mvvm light libraries only。
当前版本是5.3,说明mvvm light的更新速度还是挺快的,prerelease中还有 v5.4 的 alapha 版本。
nuget上这两个项目的区别就是mvvm light除了必要的galasoft 组件之外,还会额外添加相关分层文件目录形成简单的mvvmlight成型框架。
如图它会帮你生成viewmodel文件夹,里面包含mainviewmodel和viewmodellocator文件。
至此,一个基于mvvmlight的wpf项目框架基本搭建完成了,下面一篇我们详细说下框架的结构。
以上就是mvvm和mvvmlight介绍及在项目中的使用详解的详细内容,更多关于mvvm和mvvmlight介绍及使用的资料请关注其它相关文章!
下一篇: 数学建模-校赛-指纹识别