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

可能的方案包括:

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

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


这实际上取决于您想要实现的目标,以及您想要的基础设施的数量,再加上查找示例的难易程度。在这里我要声明一个兴趣点,因为我已经积极参与了至少一个MVVM框架,并且我通过WPF门徒小组对其他框架有所投入,所以我有一点偏见。说到这里,我想说:

微软的MVVM工具包——这仍然处于alpha阶段。当它最初发布时,它受到了门徒们的猛烈抨击,因为它没有做什么。说到这里,微软正在考虑完善这个框架,所以它是一个值得关注的框架——只是还没有准备好。

MVVM Foundation - ah Josh Smith's version of the framework. Josh is one of the daddies of MVVM, and has been a huge advocate and teacher of the pattern. As a result, a lot of what you'll find in other frameworks has Josh's fingerprints all over it. This framework is intended to provide the basics of MVVM, and not to address some of the more esoteric issues. Originally this was intended only for WPF, but people such as Laurent Bugnion and myself have added functionality/projects that mean this will be a Silverlight compatible framework as well.

WAF -没有经验,所以我恐怕不能评论它。

MVVM轻- Laurent Bugnion对它的看法,刚刚更新到版本2。这是一个非常好的框架,但它并不打算涵盖MVVM应用程序的每一个方面。考虑到Laurent的背景,它有非常强大的Silverlight和Blendability支持。

Laurent刚刚告诉我。net 3.5和。net 4.0版本的特性是兼容的。瓦乌走了,劳伦特。

Cinch - Sacha Barber's excellent WPF only MVVM framework. This covers more ground than the frameworks I've talked about above. It's an excellent framework, and takes advantage of concepts covered in Bill Kempf's excellent Onyx project. Onyx is intended to complement MVVM frameworks, and adds in functionality that's typically been hard for people to do in MVVM/WPF. Again, originally intended to be WPF only, Onyx has progressed to include SL compatibility - work I am particularly proud to have been involved in.

棱镜-再说一次,我从来没用过它,但我听说过很多关于它的好东西。

Karl Shifflett, Cider团队的项目经理,最近发布了一个功能齐全的WPF MVVM框架。同样,这是一个优秀的框架,有很多值得推荐的地方。

最重要的是,下载不同的框架,看看它们,找出最符合您的思维方式和需求的框架。如果你想从相同的代码库中支持Silverlight,那么只支持WPF的框架应该被忽略。


还可以看看:

卡利本和玛瑙!


我试着描述一下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之间进行协调。


如果您正在寻找WPF/MVVM应用程序框架之上的可扩展性(编写插件的能力),那么您可能会对SoapBox Core免责声明感兴趣:它是我写的。它是开源的,所以即使你不使用它,也可能有一些好的想法适合你。它在可扩展性和IoC方面都使用了MEF。


咩。Mvvm实际上并不需要一个完整的框架来支持IMO。如果你理解了这个概念,从一个实现INotify的干净的VM基类开始,然后从那里开始就很简单了。


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

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


还有nRoute

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


总而言之,我已经完成了我的应用程序的90%,我所使用的MVVM Toolkit是工厂函数,它为我构建了一个命令,给定一个委托函数,并在Execute中启动。 我想我可以在几个小时内切换到任何其他框架或不使用框架。


混合你自己的!

我使用PRISM的EventAggregator, MVVM foundation的ViewModelBase等等。我还调整了RelayCommand(在某些地方调用的DelegateCommand)来接受其他数据,等等。

我不会只推荐一个框架本身。


我正在用Prism,而且很喜欢它。对我来说最重要的一件事是,如果我需要帮助,会有其他人和好的例子。一旦你有了基本的运行,你的应用程序就需要一大堆的扩展,当你与别人使用相同的框架时,这就容易得多了。


另一个需要考虑的是MEFedMVVM。我已经在几个项目中使用了它,它是轻量级的,非侵入性的,并且支持Silverlight和WPF。对于使用Blend产品的用户,它还能够支持设计时数据。


我发现这篇文章非常有用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之间的消息传递


还有Ideablade开发的鸡尾酒和DevForce框架