MVVM设计模式概述
Model-View-ViewModel (MVVM)设计模式清晰地分离用户界面(UI)的业务逻辑和表示层。MVVM使得用户界面设计人员专注于界面设计,开发人员专注于代码的业务逻辑,并使得开发人员和用户界面设计人员在软件制作过程能够更容易地合作。
在MVVM设计模式,应用程序的用户界面和底层表示,以及业务逻辑被分成三个不同的类别:视图(View)、视图模型(ViewMode)和模型(Model)。MVVM设计模式犹如孙子兵法中的地形:"地形有通者,有挂者,有支者,有隘者,有险者,有远者。"夫地形者,兵之助也;MVVM则有助于应用程序的测试,维护和升级。熟练掌握MVVM的类及其相互作用,乃"将之至任,不可不察也"。故曰:"知此而用战者必胜,不知此而用战者必败"。
- 视图View—封装了用户界面和UI逻辑视图模型;
- 视图模型ViewModel—封装表示逻辑和状态;
- 模型Model—封装了应用程序的业务逻辑和数据;
下图展示了MVVM类及其相互作用。
图14-1 MVVM类及其相互作用
第三方MVVM框架
在www.CodePlex.com上有许多不错的第三方MVVM框架可供我们借鉴,其中比较推崇的有MVVM Light Toolkit、Ultra Light MVVM for Windows Phone和Simple MVVM Toolkit都适合Windows Phone的开发。
MVVM Light Toolkit
MVVM Light Toolkit是帮助人们在Silverlight和WPF中使用MVVM设计模式的一套组件。它是一个轻量级的、务实的框架,只包含所需的必要组成部分。
下载地址: http://mvvmlight.codeplex.com/ 。
在XAML中绑定DataContext
ViewModel文件夹添加了两个附加的类:ViewModelLocator.cs和MainViewModel.cs。ViewModelLocator声明在 App.xaml中可用作源的 DataContext 绑定;MainViewModel 也已添加到项目中 ViewModelLocator 作为公开属性。
注意
如果在项目中不需要使用MainViewModel,可以删除此类。
为了使用MainViewModel作为MainPage.xaml的DataContext,需要在MainPage.xaml的开始标记中添加以下代码:
DataContext="{Binding Main, Source={StaticResource Locator}}"
在Blend中绑定DataContext
DataContext 也可以直观地在Expression Blend中使用以下步骤中绑定。
- 在Expression Blend中打开Windows Phone工程;
- 编译应用程序;
- 打开MainPage.xaml;
- 在Objects和Timeline panel选择UserControl;
- 在属性面板中,选择DataContext 属性(在Common Properties部分),在Advanced属性的下拉菜单中选择数据绑定。如图 Blend的数据绑定。
图14-2 Blend的数据绑定
More information about the MVVM Light Toolkit can be found on http://www.galasoft.ch/mvvm/getstarted更多关于MVVM Light Toolkit的帮助请登录http://www.galasoft.ch/mvvm/getstarted.。
Ultra Light MVVM for Windows Phone 7
Ultra Light MVVM是轻量级的MVVM Silverlight应用程序,支持Windows Phone的逻辑删除(tombstoning)。Ultra Light MVVM支持Windows Phone的特性:
- 命令
- 命令按钮(使用参数)绑定
- 支持将命令绑定到应用程序栏上的按钮
- 对话框,通知和确认
- 位置服务
- 友好的设计时视图模式
- 具有墓碑事件控制钩的墓碑友好视图模型
- 从视图模型解耦的导航支持
- 从视图模型解耦的视觉状态支持
- 在视图模型拦截后退键
- 用户界面线程访问的分配器帮助
下载地址: http://ultralightmvvm.codeplex.com/ 。
Simple MVVM Toolkit
Simple MVVM Toolkit使开发应用MVVM设计模式Widnows Phone的应用程序变得更容易,为基于 MVVM设计模式的应用程序提供一个简单的框架和工具集。Simple MVVM Toolkit的特点是简单,但它包含执行 MVVM 设计模式的应用程序所需的一切。
下载地址: http://simplemvvmtoolkit.codeplex.com/ 。
来自Tony Sneed博客的Simple MVVM Toolkit和MVVM Light Toolkit的比较结果。
图14-3 Simple MVVM Toolkit和MVVM Light Toolkit的比较
Simple MVVM Toolkit安装后的MVVM应用程序如图 Simple MVVM Toolkit。
图14-4 Simple MVVM Toolkit