在WP开发中如何使用MVVM Light框架

移动开发
MVVM Light是Silverlight开发中比较流行的MVVM框架,本文将根据一个实际项目,为您介绍MVVM Light的使用方法。

MVVM Light是Silverlight开发中比较流行的MVVM框架。本文作者将根据一个实际项目(Windows Phone程序),为大家介绍MVVM Light的使用说明。

MVVM Light相关资源

项目地址:http://mvvmlight.codeplex.com/releases

MVVM Light介绍

首先贴一张图,这是MVVM的一个内部通信机制。

MVVM Light介绍

简单的概括来说MVVM Light帮我实现了View和ViewModel的相互通信,ViewModel和Model的通信。

为什么使用MVVM Light

◆比较方便做单元测试;

◆不需要改变Model来支持不同的View变化;

◆在View发生变化时,只需要对ViewModel做极小的改变就可以适应新的程序,很方便程序的移植;

◆将设计UE和开发分离,开发人员只负责底层通信的实现,做界面的人员只需尽可能的去美化UI,我们团队中将ViewModel也是交给界面设计人员来做,我觉得ViewModel究竟由UE还是由开发来做还是值得商榷的,因该根据具体团队分工来说。

MVVM Light使用

如果你打开我上面说的链接地址的话,你会安装MVVM Light的.msi文件,安装成功后,打开VS2010,选择新建项目,会看到如下界面:

MVVM lihgt使用

新建好一个MVVM项目,你会在右边看到一个如下的项目树,他们中分别有对应我们需要使用的View,ViewModel,Model,我个人习惯一个View对应一个ViewModel,当然如果Model有复用的情况,就可以多个ViewModel对应一个Model,所以Model的数量是根据个人情况可以改变的,有的人还习惯将Model放入ViewModel中,但是既然MVVM Light已经给我们将文件树的框架列出来了,我想也有他的道理。

再说说那个ViewModelLocator文件,他是整个项目的核心文件,打个比方来说就好比人脊梁,支撑着我们的四肢。在他当中我们对每一个ViewModel进做了实例化,而在他的构造函数中使用了一个Singleton设计模式,从而保证,在整个项目运行过程中,只存在一个ViewModelLocator实例,不过我发现这个Singleton并没有对多线程做支持,也就是说如果你做的是多线程程序,这里需要改成支持多线程的Singleton,具体我在之前的博文中有介绍Singleton。

MVVM lihgt使用

介绍完了各个文件的作用,就来说说具体用法,在这里我不想一步一步写出来每一行代码的用法,因为感觉浪费时间,而且有些重复很多网友的劳动,我只将一些比较关键的代码贴出来,希望对你起到触类旁通的作用。

首先打开App.xaml文件,你会看到如下代码,如果没有请自己添上,因为App文件是一个全局变量,并且在程序最开始启动就已经运行了,这里的代码是告诉编译器在程序一开始就去访问ViewModelLocator文件,并且构造一个全局可以访问的ViewModelLocator实例,x:key是用于xaml文件访问的,d:IsDataSource是用于ExpressionBlend构建界面时来实时显示数据用的。

MVVM lihgt使用

既然有了全局的ViewModelLocator,那么就可以在View中去构建Command与ViewModel中的Command进行绑定,从而实现View和ViewModel的通信,下面是在View当中两种调用Command的方式:

MVVM lihgt使用 

MVVM lihgt使用 

MVVM lihgt使用

上面两个调用方式效果是完全一样的,我怀疑上面那种方式是下面的一种封装,因为cmd是可以用在Button类控件当中的,而下面的则不行,当然除了简简单单的绑定Command外,也可以传递CommandParameter参数,而且还有支持手势的Command,因为本文并没有想去讨论的这么深入,所以就不多深入介绍,如果你有兴趣,可以通过右侧微博或是在博客里留言等方式找到我。

下面是在ViewModel中去实现上面所要用到的Command。

MVVM lihgt使用 

MVVM lihgt使用

除了Command外,相信MVVMLight给我带来的就是Messager这个东西了,他一般被使用在code-behind当中,使用方式如下:

MVVM lihgt使用

在ViewModel中响应该Messenger的代码在之前介绍ViewModel的Command中已经有出现,可以看看那里注释掉的代码,在这里需要注意的是在OnNavigationTo方法注册了Messenger之后在OnNavigationFrom中一定要进行卸载,否则会造成内存泄漏。

原文链接:http://tmango.com/?p=878

责任编辑:王晓东 来源: tmango.com
相关推荐

2012-05-28 10:34:50

MVVM 数据绑定

2013-02-25 11:06:34

2017-02-24 10:02:04

AndroidMVVM应用框架

2012-05-08 11:03:28

Coding4Fun

2021-03-11 16:34:57

css前端CSS 特效

2009-07-06 15:19:13

webwork ser

2015-05-05 10:32:15

iOS-MVVM框架

2012-05-14 15:44:20

Coding4Fun Coding4Fun

2010-04-20 09:14:33

Struts

2016-03-01 13:48:36

MVVMios快速开发

2021-08-22 17:22:31

VS Code容器开发人员

2012-06-05 09:54:50

Windows Pho

2024-01-30 08:56:55

性能监控性能管理工具内存存储

2024-04-23 10:23:34

WPFMVVMPrism

2021-09-17 09:30:57

鸿蒙HarmonyOS应用

2012-05-08 09:15:10

WP8Windows 8

2018-01-08 15:30:18

Linux命令date

2024-04-28 10:22:08

.NETMVVM应用工具包

2011-08-18 11:10:49

Core Plot框架IOS开发

2017-11-01 07:57:08

Python
点赞
收藏

51CTO技术栈公众号