我正在使用MVVM模型开发一个应用程序,但我已经到了需要选择使用哪个框架的地步。
可能的方案包括:
MVVM工具包 MVVM基金会 WPF应用框架(WAF) 光MVVM 这份原稿 有把握的事情 棱镜 ReactiveUI
根据你的经验,哪个更好?
我正在使用MVVM模型开发一个应用程序,但我已经到了需要选择使用哪个框架的地步。
可能的方案包括:
MVVM工具包 MVVM基金会 WPF应用框架(WAF) 光MVVM 这份原稿 有把握的事情 棱镜 ReactiveUI
根据你的经验,哪个更好?
当前回答
我正在用Prism,而且很喜欢它。对我来说最重要的一件事是,如果我需要帮助,会有其他人和好的例子。一旦你有了基本的运行,你的应用程序就需要一大堆的扩展,当你与别人使用相同的框架时,这就容易得多了。
其他回答
我发现这篇文章非常有用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之间的消息传递
咩。Mvvm实际上并不需要一个完整的框架来支持IMO。如果你理解了这个概念,从一个实现INotify的干净的VM基类开始,然后从那里开始就很简单了。
如果您正在寻找WPF/MVVM应用程序框架之上的可扩展性(编写插件的能力),那么您可能会对SoapBox Core免责声明感兴趣:它是我写的。它是开源的,所以即使你不使用它,也可能有一些好的想法适合你。它在可扩展性和IoC方面都使用了MEF。
我正在用Prism,而且很喜欢它。对我来说最重要的一件事是,如果我需要帮助,会有其他人和好的例子。一旦你有了基本的运行,你的应用程序就需要一大堆的扩展,当你与别人使用相同的框架时,这就容易得多了。
还有Ideablade开发的鸡尾酒和DevForce框架