利刃 MVVMLight 1: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/,上面有详细的介绍和视频文档,

同时作者还将代码开源到Codeplex上面:http://mvvmlight.codeplex.com/,有兴趣的同学可以下载来了解下。

有趣的是,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项目框架基本搭建完成了,下面一篇我们详细说下框架的结构。

时间: 2024-10-22 07:04:08

利刃 MVVMLight 1:MVVMLight介绍以及在项目中的使用的相关文章

简单介绍在C# 项目中使用 redis

搜索了一圈, 发现没有比较全面且简单的介绍如何在C#项目中使用redis的, 大部分都是零碎的文章,稍微组织了一下,希望对要用redis的人有帮助. 前提 1. Redis is an open source, BSD licensed, advanced key-value store, 简单说用来缓存数据,更多信息参照官网 http://redis.io/,很多大网站都在用这个, 参照 http://redis.io/topics/whos-using-redis. 2. Redis官方是没

Mvvmlight实践一:如果在项目中添加使用Mvvmlight(图文详解)

最近一直在做UWP开发,为了节省成本等等接触到MVVMlight,觉得有必要发点时间研究它的用法与实现原理才行.如果有问题的地方或者有好的建议欢迎提出来. 随着移动开发的热门,Mvvmlight在Android,Ios,WPF,Silverlight以及UWP等分层开发中被广泛应用.同时Mvvmlight也支持Xamarin开发.Mvvmlight字面意思也容易理解:轻量级Mvvm框架,相对于微软最近开源Prism而已确实简单易懂.要理解Mvvmlight首先得理解MVVM框架: 在具体讲解其原

MVVMLight介绍以及在项目中的使用

http://www.des8.me/detail-1822826.html 一.MVVM 和 MVVMLight介绍 MVVM是Model-View-ViewModel的简写.类似于目前比较流行的MVC.MVP设计模式,主要目的是为了分离视图(View)和模型(Model)的耦合. 它是一种极度优秀的设计模式,但并非框架级别的东西,由MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构. 立足于原有MVP框架并且把WPF的新特性糅合进去,以应

项目中使用Redis的一些总结和体会

第一部分:为什么我的项目中要使用Redis 我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步! 注册时邮件激活的部分使用Redis 发送邮件时使用Redis的消息队列,减轻网站压力. 使用Lucene.Net在进行分词时使用Redis消息队列和多线程来避免界面卡死等性能问题. 请大家先思考一个问题:这个问题在大并发.高负载的网站中必须考虑!大家思考如何让速度更快. 三种方法:(1)数据库(2)页面静态化(3)Redis.Memcached 第二部分:Redis是什么 概述:r

在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式,虽然Web API或者WCF方式的调用,相对直接连接数据库方式,响应效率上略差一些,不过扩展性强,也可以调动更多的设备接入,包括移动应用接入,网站接入,Winfrom客户端接入,这样可以使得服务逻辑相对独立,负责提供接口即可.这种方式中最有代表性的就是当前Web API的广泛应用,促进了各个接入端

Java算法之递归打破及在真实项目中的使用实例

开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归算法与真实项目接口??? 3.如何打破递归算法??? 解决问题 1.首先练习下网上一些递归经典题 1 package com.hwy.test; 2 3 /** 4 * 递归函数测试 5 * Created by Ay on 2016/7/2. 6 */ 7 public class RecursionTes

在一个项目中同时使用Swift和Objective-C代码混合编程的方法

主要介绍了在一个项目中同时使用Swift和Objective-C代码的方法,在一个工程中同时使用Swift和Objective-C混合语言编程的方法. Swift 与 Objective-C 的兼容能力使你可以在同一个工程中同时使用两种语言.你可以用这种叫做 mix and match 的特性来开发基于混合语言的应用,可以用 Swfit 的最新特性实现应用的一部分功能,并无缝地并入已有的 Objective-C 的代码中. Mix and Match 概述 Objective-C 和 Swift

简要记录下localStorage在项目中的应用之一

localStorage作为HTML5本地存储web storage特性的API之一,主要作用是将数据保存在客户端中.localStorage保存的数据,一般情况下是永久保存的,也就是说只要采用localstorage保存信息,数据便一直存储在用户的客户端中.即使用户关闭当前web浏览器后重新启动,数据仍然存在.知道用户或程序明确制定删除,数据的生命周期才会结束. 下面介绍一个实际项目中的情况, 比如说有一个编辑页面,叫他页面A,都是可编辑,可更改的信息,如下图:

vue项目中使用阿里iconfont图标

在上一篇文章中介绍了如何在vue项目中使用vue-awesome,如果你想了解,请移步<vue项目中使用vue-awesome> 这里介绍一下vue项目中如何使用阿里的iconfont图标库,先看一下官网 可以看到有将近两百万的图标量,可以说我们想要的矢量图图标这里大部分都是有的,下面直接开始如何在vue项目中使用,方法有两种 方法一:简单粗暴法 1.打开 iconFont官网 选择自己喜欢的图标,并且添加购物车 例如我现在选择三个图标 点击购物车,添加至项目 为了方便可以给项目起一个名字 选