Model-View-ViewModel 是一种架构模式,主要在 WPF、Silverlight 和 WP7 开发里使用,它的目标是从视图层移除几乎所有代码隐藏(code-behind)。交互设计师可以专注于使用 XAML 表达用户体验需求,然后创建和视图模型的绑定,而视图模型则是由应用程序开发者开发和维护的。
MVVM 是更加通用的 Presentation 模式的一个具体实现。MVVM 视图模型包含概念模型而不是数据模型,所有业务逻辑和其它操作都是在模型和视图模型里完成的。有很多框架可以做到这点,其中一些是:
开源的
闭源的
- Intersoft ClientUI:付费的,只支持 WPF 和 Silverlight,但是,除了 MVVM 框架,它还提供其它一些特性。
-
Vidyano:免费但不开源。带有实体映射/虚拟持久化对象(数据容器),业务规则以及内置基于 ACL 的安全特性。
若想了解 MVVM,可以参考以下资料:
使用 MVVM 的最大好处之一是分离关注点,以便用户体验设计师和应用程序开发者可以并行工作。另一方面,相关的担忧包括它对于 UI 操作比较简单的情况有点杀鸡用牛刀的感觉,数据绑定有点难以调试,以及大量使用数据绑定可能带来性能问题等等。
Jonathan Allen 在评论里提到几点错误使用 MVVM 的征兆:
1. 你的模型和视图模型名字相同。
视图模型不应该是对模型的包装。视图模型的职责是外部服务的请求中介,比如加载和保存数据。而数据本身,以及验证和大多数业务逻辑应该放在模型里。
我经常强调这点。每当你创建一个视图模型包装一个模型,你就在你的 API 里引入一个巨大漏洞。具体地,任何直接引用这个模型的东西都可能以视图模型无法察觉的方式改变某个属性,因此 UI 也不会有相应的改变。同样地,模型里计算字段的任何更改也不会回传给视图模型。
2. 你的视图和视图模型名字相同。
理想的情况下,视图模型是不知道使用它们的视图的,尤其是 WPF 应用程序有多个窗口共享相同的视图模型。
对于比较小型的应用程序来说,整个应用程序可能只需一个视图模型。对于比较大型的应用程序来说,主要功能可能需要一个视图模型,每个次要方面也需要一个,比如配置管理。
3. 你没有代码隐藏。
代码隐藏既非一个好的东西,亦非一个坏的东西。它只是一个用来放置和视图或控件相关的逻辑的地方。因此,当我看到一个视图没有任何代码隐藏,我就会马上检查是否存在以下问题:
- 视图模型是否通过名字接触了特定的控件?
- 视图模型是否通过命令参数访问控件?
- 是否使用了 EventToCommand 或其它可以导致泄露的行为而不是简单的事件处理程序?
MVVM Light 的 EventToCommand 很有问题,因为它会使得控件从屏幕移除之后无法被垃圾回收。
4. 视图模型监听属性更改通知
如果一个模型的的生命周期比监听它的事件的视图模型长,那么可能导致内存泄露。不同于视图有个 Unloaded 事件,视图模型对于生命周期管理没有很好的方案。因此如果它们关联到存活期比它们更长的视图模型的事件,视图模型将会出现泄露。.NET的MVVM框架
分享到:
相关推荐
原版为PCL类库,不支持最新的VS2017 我的博客http://blog.csdn.net/loongsking/article/details/71717301
:eyes:MvvmCross是跨平台的MVVM框架。 它使开发人员可以在Xamarin.iOS,Xamarin.Android,Xamarin.Mac,Xamarin.Forms,通用Windows平台(UWP)和Windows Presentation Framework(WPF)上使用MVVM模式创建应用程序...
MvvmCross是一个跨平台的MVVM框架。 它使开发人员可以在Xamarin.iOS,Xamarin.Android,Xamarin.Mac,Xamarin.Forms,通用Windows平台(UWP)和Windows Presentation Framework(WPF)上使用MVVM模式创建应用程序。...
MvvmCross是一个跨平台的MVVM框架。 它使开发人员可以在Xamarin.iOS,Xamarin.Android,Xamarin.Mac,Xamarin.Forms,Universal Windows Platform(UWP)和Windows Presentation Framework(WPF)上使用MVVM模式...
基于NET6框架下采用WPF+MVVM进行的UI设计。 主要实现了是仿360软件下载类似功能的界面设计,主要是下载进度条的动态化。 适合人群: 刚接触WPF的新人 能学到什么: WPF自定义控件、样式、MVVM、异步线程等 阅读建议...
ReactiveUI - 一个.Net的MVVM的框架它集成了Reactive Extensions (Rx)框架。使开发人员可以构建优雅,可测试的应用程序使用 WPF, Windows Store Apps, WP8 or Xamarin。
微服务:单点登陆SSO,token授权-OAUTH/JWT,服务发现注册consul,配置中心,api网关Ocelot、垄断Polly,消息总线ribitmq、定时调度总线... web后端:IOC/DI-autofac,ORM-sqlSugar,AOP-Castle web前端:MVVM-Vue.js,webpack
c# MVVM 小例子 vs2015
Aspnet-dotvvm.zip,web应用程序的开源mvvm框架基于组件的asp.net mvvm框架,asp.net是一个开源的web框架,用于使用.net构建现代web应用和服务。asp.net创建基于html5、css和javascript的网站,这些网站简单、快速,...
本项目是一个基于RX与 await等新技术的轻量级MVVM框架。其核心是ViewModelBase类型,你甚至可以把它拿出去和别的框架一起使用。
.net2010 prism框架dll文件 4.0的prism 正在做项目 找了很久才集全
Android-MvvmCross.zip,用于跨平台解决方案的.NET MVVM框架,包括xamarin.ios、xamarin.android、Windows和Mac。,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上...
WPF应用程序 .net4.5框架 +MvvmLight +Sqlite 实现数据增加删除即时更新到datagrid,非常实用的入门级小数据操作应用程序,源码上传可以参考使用
.NET的极简主义MVVM框架。 安装 在可用。 用法 可观察的 INotifyPropertyChanged的基本实现,带有用于提高属性更改的辅助方法。 Set(ref T field, T newValue, [auto] string propertyName) :使用给定的新值设置...
网上mvvm相关资料不多,整理了一下,仅供参考研究wpf
Android MVVM 开发框架 具体详见 http://blog.csdn.net/q610098308/article/details/70903010
ReactiveUI 是集成了 .Net 的 ReatIve 扩展的 MVVM 框架,用来创建运行与任何移动设备或者桌面平台的优雅的可测试的用户接口。它支持 Xamarin.iOS,Xamarin.Android,Xamarin.Mac, WPF,Windows Forms,Windows ...
具有流畅API的Xamarin.Forms的简单,快速,轻量级MVVM框架 Xamvvm。核心Xamvvm。表格Xamvvm.Forms.RxUI Xamvvm.Mock(单元测试)产品特点非常易于使用。 只需使用空接口IBasePage<TPageModelType> / IBasePageModel...
MVVM-Sidekick:基于RX和TAP的现代轻量级MVVM框架正在等待中。 该框架的核心是ViewModelBase类,您甚至可以将其与其他框架一起使用。 本项目是一个基于RX与await等新技术的轻量级MVVM框架。其核心是ViewModelBase...
里面包含一些资源:漂亮的WPF界面框架(OSGi.NET插件)源码.rar 基于插件式的开发框架源码.rar WPF之DataGrid.rar MVVMDataGrid.rar WPF界面下的会员登录.rar WPF动态添加行列DATAGRID.rar WpfApplication1.zip WPF....