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框架
分享到:
相关推荐
MvvmCross是一款高度可扩展的.NET MVVM框架,专为跨平台移动开发设计,支持诸如Android、iOS、Universal Windows Platform (UWP) 和Windows Presentation Foundation (WPF) 等平台。这款框架使得开发者能够在不同的...
ASP.NET MVVM(Model-...例如,`GalaSoft.MvvmLight`是一个流行的MVVM框架,它由Laurent Bugnion开发,提供了许多便利的功能,如 Messenger 类用于跨视图模型通信, GalaSoft.MvvmLight.ViewModelBase 作为基类,包含 ...
: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模式...
`SimpleMvvmDemo`项目提供了一个基础的框架,展示了如何在C#和VS2015环境中应用MVVM模式,这对于初学者理解和实践这一模式是非常有帮助的。通过研究这个小例子,你可以学习到如何构建一个具有数据绑定、命令处理和...
SunnyUI.Net框架基于.NET平台,采用MVVM(Model-View-ViewModel)设计模式,为开发者提供了丰富的UI组件和模板,以便快速构建前端界面。它支持ASP.NET MVC、ASP.NET Core以及Blazor等.NET开发框架,具有良好的跨平台...
ReactiveUI - 一个.Net的MVVM的框架它集成了Reactive Extensions (Rx)框架。使开发人员可以构建优雅,可测试的应用程序使用 WPF, Windows Store Apps, WP8 or Xamarin。
在本文中,我们将深入探讨如何在WinForm应用中利用MVVM框架,并且通过引入Castle动态代理来提升效率和代码复用性。标题“winform上的mvvm框架--升级版(动态代理)”揭示了我们将在WinForm环境中实现一个基于MVVM...
MVVM(Model-View-ViewModel)框架是一种设计模式,尤其在现代UI开发中,如WPF(Windows Presentation Foundation)和UWP...通过对以上知识点的学习和实践,初学者可以逐步掌握使用MVVM框架进行WPF应用开发的基本技能。
微服务:单点登陆SSO,token授权-OAUTH/JWT,服务发现注册consul,配置中心,api网关Ocelot、垄断Polly,消息总线ribitmq、定时调度总线... web后端:IOC/DI-autofac,ORM-sqlSugar,AOP-Castle web前端:MVVM-Vue.js,webpack
.NET前端界面框架是用于构建用户交互界面的工具集,它主要负责将数据和业务逻辑转化为用户可见并可操作的元素。此源码包名为".net前端界面框架源码20170808",可能包含了一套特定日期(2017年8月8日)的.NET前端开发...
MVVM框架通过分离关注点,使得开发人员可以专注于各自的领域:UI设计师可以处理视图,而程序员则专注于业务逻辑和数据处理。在C#和WPF的环境下,MVVM模式提供了强大的数据绑定和命令支持,使得开发更高效、可测试性...
**WPF MVVM框架简介** WPF(Windows Presentation Foundation)是微软.NET Framework的一部分,用于构建Windows桌面应用程序。它提供了一种强大的数据绑定、图形渲染和资源管理机制,使得开发者能够创建美观且功能...
EfsFrame是一个基于.Net开发的框架,主要用于简化和加速企业级应用的构建过程。这个框架提供了许多预定义的组件、模式和最佳实践,使得开发者能够更高效地进行软件开发,减少重复工作,提高代码质量和可维护性。版本...
总的来说,.NET-MVVMSidekick是一个强大且灵活的MVVM框架,它利用RX和`async/await`特性,为.NET开发者提供了高效、易用的工具,帮助他们构建高性能、响应式的桌面和移动应用程序。通过深入理解和使用MVVMSidekick,...
**基于WPF MVVM框架开发的串口调试助手Assistant,带有Scichart波形插件** 本项目是一款基于Windows Presentation Foundation (WPF) 框架,并采用MVVM(Model-View-ViewModel)设计模式的串口调试工具,集成了...
**WPF MVVM 整套框架** Windows Presentation Foundation (WPF) 是 Microsoft 开发的一种用于构建 Windows 桌面应用程序的框架,它基于 .NET Framework 或 .NET Core。MVVM(Model-View-ViewModel)是一种设计模式...
总结来说,WPF MVVM框架通过分离关注点,实现了UI设计与业务逻辑的解耦,提高了代码的可读性、可维护性和测试性。在实际项目中,结合数据绑定、命令、依赖属性以及XAML等特性,开发者可以构建出高效、灵活且易于扩展...
基于NET6框架下采用WPF+MVVM进行的UI设计。 主要实现了是仿360软件下载类似功能的界面设计,主要是下载进度条的动态化。 适合人群: 刚接触WPF的新人 能学到什么: WPF自定义控件、样式、MVVM、异步线程等 阅读建议...