我正在使用MVVM模型开发一个应用程序,但我已经到了需要选择使用哪个框架的地步。

可能的方案包括:

MVVM工具包 MVVM基金会 WPF应用框架(WAF) 光MVVM 这份原稿 有把握的事情 棱镜 ReactiveUI

根据你的经验,哪个更好?


当前回答

我发现这篇文章非常有用http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/所以我把它带到这里给即将到来的用户

我更新了Cinch部分,并为其特性添加了silverlight支持

很抱歉说来话长

共同特点:

•ViewModelBase类(用于INotifyPropertyChanged接口的实现) •RelayCommand类链接UI命令到ViewModel的处理程序 •单元测试随框架而来

有把握的事情

• Author: Sacha Barber • Silverlight support: no (Cinch version 2 supports Silverlight) • Documentation: excellent, 6 articles published on CodeProject • Hosting : CodePlex • License: Code Project Open License • Features: attached behaviors validation using IDataErrorInfo support for IEditableObject weak events creation and subscription mediator messaging using weak events IOC/DI support (using Unity) services: event logger, message box, open save dialog, popup threading helpers support for menu items closeable viewmodels MVVM code generator

MVVM Light Toolkit

•作者:劳伦特•巴尼翁 •Silverlight支持:是的 •文档:Laurent的博客上有很多文章,其他开发者也有 •托管:CodePlex •License: MIT License •特点: MSI安装程序 VS项目和项模板 VS代码片段 用于视图模型间通信的信使系统 将事件作为命令处理

MVVM 帮助程序

•作者:马克·史密斯 •不支持Silverlight 文档:马克博客上的一些文章 •托管:个人网站 •许可:未定义 •特点: 附加的行为 使用标记扩展创建视图模型 基于属性的验证 IOC/DI使用ServiceProvider方法 closeable视图模型 等待游标(使用新的WaitCursor(){//这里的代码})

MVVM Foundation)

•作者:乔什·史密斯 •不支持Silverlight 文档:在Josh或Marlon Grech的博客上有关于Messenger实现的文章 •托管:CodePlex •许可:MS-PL •特点: 用于视图模型间通信的信使系统 PropertyChanged事件监视器

Caliburn

• Author: Rob Eisenberg • Silverlight support: yes • Documentation: complete online documentation available • Hosting: CodePlex http://www.codeplex.com/caliburn • License: MIT license • Features: commands are built on top of Actions and thus share many of the same features, including multiple input parameters, filters and automatic asynchronous execution presenters that handles UI lifecycle issue such as handling activation, deactivation and shutdown semantics for various UI components Caliburn applications are fully testable various utilities such as a background task manager supports various UI pattern (not MVVM only) dependency injection container

Onyx

•作者:威廉·肯普夫 •不支持Silverlight •文档:CodePlex上的基本介绍 •托管:CodePlex •License:未指定 •特点: ServiceLocator模式 使用自定义标记扩展创建ViewModel UI相关服务,如IDisplayMessage

• Author: Daniel Vaughan • Silverlight support: no • Documentation: 2 very detailed articles on CodeProject (part1 and part2) • Hosting: CodePlex • License: use, copy, modify, and/or distribute and keep the copyright! • Features: Module Manager for enabling or disabling of modules at runtime messaging services for interacting with the user from the client or server using the same API Command Service to associate WPF ICommands with content interfaces that only become active when an active view or viewmodel implements the interface Region Adapters for ToolBars and Menus Client-server logging ready to work out-of-the-box Includes modules, such as a Web Browser, Text Editor, Output Window, and many more Tabbed interface with dirty file indication (reusable across modules)

n路线

•作者:Rishi •Silverlight支持:是的 •文档:作者博客上有很多文章(参见CodePlex项目主页上的链接) •托管:CodePlex •许可:MS-PL •特点: 支持Blend3行为和触发器模型 资源定位器框架 查看服务:OpenFileDialog, ShowMessage… 使用属性将View和ViewModel映射在一起

MVVM的

•作者:沙玛 •不支持Silverlight •文档:无 •托管:CodePlex •License:未指定 •特点: ICommand接口的各种MVVM友好实现

海洋

•作者:Karl Shifflet •不支持Silverlight 文档:卡尔博客上的文章 •托管:个人网站 •License:未指定 •特点: 用VB编写。网 基于属性的验证 视图模型基类:relaycommand, closeableviewmodel… SQL server数据访问层

基本的MVVM框架

•作者:莱斯特•洛博 •不支持Silverlight 文档:库中提供的示例应用程序 •托管:CodePlex •许可:MS-PL •特点: 授权命令\ Keybinding VM之间的消息传递 将事件作为带有附加行为的命令处理 将对话框(以及更多)作为服务处理 VS代码片段

GoodLight

•作者:Peter O’hanlon•Silverlight支持:是的 文档:库中提供的示例应用程序 •托管:CodePlex •许可:MS-PL •特点: “工作区”管理(可关闭的文档集) 皮肤的支持 VM之间的消息传递

其他回答

我试着描述一下Pete的回答中所缺少的框架:

MVVM Toolkit (Microsoft)是一个非常轻量级的库,其中包含Visual Studio项目模板,应该支持使用此模式的初学者。如果微软对他们的Toolkit得到了良好的反馈,那么他们可能会将其作为一个新的Visual Studio(可能是2010年)项目模板来实现。

Prism (Microsoft p&p)是一个框架,它提供了对MVVM模式的更多支持。这个项目的主要目标是帮助你构建模块化的WPF和/或Silverlight应用程序。如果你只是需要实现MVVM模式,或者你是。net / wpf的初学者,我不会推荐这个项目。 参见:链接。

WPF应用程序框架(WAF)是一个轻量级框架,可以帮助您使用MVVM创建WPF应用程序。它只针对WPF,所以不支持Silverlight。它与大多数其他MVVM框架不同,它引入了控制器。它们负责应用程序工作流,并在各种viewmodel之间进行协调。

还有nRoute

一个非常好的WPF/Silverlight应用框架,支持MVVM

还可以看看:

卡利本和玛瑙!

我发现这篇文章非常有用http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/所以我把它带到这里给即将到来的用户

我更新了Cinch部分,并为其特性添加了silverlight支持

很抱歉说来话长

共同特点:

•ViewModelBase类(用于INotifyPropertyChanged接口的实现) •RelayCommand类链接UI命令到ViewModel的处理程序 •单元测试随框架而来

有把握的事情

• Author: Sacha Barber • Silverlight support: no (Cinch version 2 supports Silverlight) • Documentation: excellent, 6 articles published on CodeProject • Hosting : CodePlex • License: Code Project Open License • Features: attached behaviors validation using IDataErrorInfo support for IEditableObject weak events creation and subscription mediator messaging using weak events IOC/DI support (using Unity) services: event logger, message box, open save dialog, popup threading helpers support for menu items closeable viewmodels MVVM code generator

MVVM Light Toolkit

•作者:劳伦特•巴尼翁 •Silverlight支持:是的 •文档:Laurent的博客上有很多文章,其他开发者也有 •托管:CodePlex •License: MIT License •特点: MSI安装程序 VS项目和项模板 VS代码片段 用于视图模型间通信的信使系统 将事件作为命令处理

MVVM 帮助程序

•作者:马克·史密斯 •不支持Silverlight 文档:马克博客上的一些文章 •托管:个人网站 •许可:未定义 •特点: 附加的行为 使用标记扩展创建视图模型 基于属性的验证 IOC/DI使用ServiceProvider方法 closeable视图模型 等待游标(使用新的WaitCursor(){//这里的代码})

MVVM Foundation)

•作者:乔什·史密斯 •不支持Silverlight 文档:在Josh或Marlon Grech的博客上有关于Messenger实现的文章 •托管:CodePlex •许可:MS-PL •特点: 用于视图模型间通信的信使系统 PropertyChanged事件监视器

Caliburn

• Author: Rob Eisenberg • Silverlight support: yes • Documentation: complete online documentation available • Hosting: CodePlex http://www.codeplex.com/caliburn • License: MIT license • Features: commands are built on top of Actions and thus share many of the same features, including multiple input parameters, filters and automatic asynchronous execution presenters that handles UI lifecycle issue such as handling activation, deactivation and shutdown semantics for various UI components Caliburn applications are fully testable various utilities such as a background task manager supports various UI pattern (not MVVM only) dependency injection container

Onyx

•作者:威廉·肯普夫 •不支持Silverlight •文档:CodePlex上的基本介绍 •托管:CodePlex •License:未指定 •特点: ServiceLocator模式 使用自定义标记扩展创建ViewModel UI相关服务,如IDisplayMessage

• Author: Daniel Vaughan • Silverlight support: no • Documentation: 2 very detailed articles on CodeProject (part1 and part2) • Hosting: CodePlex • License: use, copy, modify, and/or distribute and keep the copyright! • Features: Module Manager for enabling or disabling of modules at runtime messaging services for interacting with the user from the client or server using the same API Command Service to associate WPF ICommands with content interfaces that only become active when an active view or viewmodel implements the interface Region Adapters for ToolBars and Menus Client-server logging ready to work out-of-the-box Includes modules, such as a Web Browser, Text Editor, Output Window, and many more Tabbed interface with dirty file indication (reusable across modules)

n路线

•作者:Rishi •Silverlight支持:是的 •文档:作者博客上有很多文章(参见CodePlex项目主页上的链接) •托管:CodePlex •许可:MS-PL •特点: 支持Blend3行为和触发器模型 资源定位器框架 查看服务:OpenFileDialog, ShowMessage… 使用属性将View和ViewModel映射在一起

MVVM的

•作者:沙玛 •不支持Silverlight •文档:无 •托管:CodePlex •License:未指定 •特点: ICommand接口的各种MVVM友好实现

海洋

•作者:Karl Shifflet •不支持Silverlight 文档:卡尔博客上的文章 •托管:个人网站 •License:未指定 •特点: 用VB编写。网 基于属性的验证 视图模型基类:relaycommand, closeableviewmodel… SQL server数据访问层

基本的MVVM框架

•作者:莱斯特•洛博 •不支持Silverlight 文档:库中提供的示例应用程序 •托管:CodePlex •许可:MS-PL •特点: 授权命令\ Keybinding VM之间的消息传递 将事件作为带有附加行为的命令处理 将对话框(以及更多)作为服务处理 VS代码片段

GoodLight

•作者:Peter O’hanlon•Silverlight支持:是的 文档:库中提供的示例应用程序 •托管:CodePlex •许可:MS-PL •特点: “工作区”管理(可关闭的文档集) 皮肤的支持 VM之间的消息传递

我打赌会在Caliburn和MVVMlight上,似乎没有多少mvvm框架支持silverlight。我可以预见,将会有更多的MVVM框架可供选择,而不是IoC框架,因为建立MVVM框架的特性边界更加困难。我想找出哪一个更适合你的项目的最好方法是列出/比较它们的功能。

也可以看看Mix10。我从演讲中学到了很多:构建你的mvvm框架。