【Advanced Windows Phone Programming】 MVVM设计模式与WP7通用框架(1)
首先要阐述一点,MVVM并不是一个设计框架,而是一种设计模式,是MVP的一种进化,而MVVM的实现条件之一是UI与数据可以完美的分离,所以说,这种设计模式是为所有采用XAML进行UI制作,并用绑定的方式进行UI与后台数据的交互的软件量身定制的。譬如Silverlight,譬如WPF,而我们通常所说的MVVM框架指的则是galasoft的MVVMlight框架,地址如下所示,该框架支持windows phone 7.0与7.1 。
http://mvvmlight.codeplex.com/
然而,这里并不推荐大家使用该框架,虽然该框架支持Message,Command等诸多特性,并对设计器提供了良好的支持,但是它的几个致命缺陷导致了他可能并不适用于Windows Phone应用程序的开发,Mvvmlight初期是为silverlight和WPF设计的,然而Wpf和silverlight与windows phone程序在执行模型和生命周期上有本质上的不同,这就导致了很多令人抓狂的问题,顺带一提,很多公司想用mvvmlight快速的搭建好一个小型程序,并在后期版本进行整改,但是事实证明这个过程是很痛苦的,而且成本很高昂。
首先我们来看一下一个普通的windows phone应用的生命周期和执行模型:
可用于应用程序状态管理的主事件有四个:Launching、Deactivated、Activated 和 Closing。这些事件的处理程序包含在Application 对象中,该对象是 Windows Phone 应用程序的 Visual Studio 项目模板的一部分。您将在这些事件处理程序中编写代码来管理应用程序状态。
事件或方法 |
应用程序操作 |
---|---|
Launching 事件 |
执行非常少量的代码。不要执行资源密集型操作,例如,访问独立存储。 |
OnNavigatedFrom 方法 |
如果不是向后导航,则将 UI 状态保存到 State 字典。 |
Deactivated 事件 |
当应用程序被逻辑删除时,将应用程序状态保存到 State。同时,在应用程序终止时,将持续状态保存到独立存储。当应用程序进入休眠状态时,不要销毁内存中应用程序的状态。 |
Activated 事件 |
检查 IsApplicationInstancePreserved。若为 true,则不执行任何操作。若为 false,则使用 State 中的数据还原应用程序状态。 |
OnNavigatedTo 方法 |
检查页面是否为新实例。若不是,则状态自动保持。否则,如果 State 中存在数据,则使用该数据还原 UI。 |
Closing 事件 |
将持续应用程序数据保存到独立存储。 |