我应该使用什么MVVM框架?

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

可能的方案包括:

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

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

72895 次浏览

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

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

MVVM基金会 -啊,Josh Smith的框架版本。Josh是MVVM的创始人之一,一直是该模式的大力倡导者和老师。因此,您将在其他框架中找到的许多内容都带有Josh的痕迹。这个框架旨在提供MVVM的基础知识,而不是解决一些更深奥的问题。最初这只是为WPF设计的,但是像Laurent Bugnion和我自己这样的人增加了功能/项目,这意味着这也将是一个与Silverlight兼容的框架。

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

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

Laurent刚刚通知我。net 3.5和。net 4.0版本是功能兼容的。瓦乌走了,劳伦特。

Cinch - Sacha Barber的优秀的WPF只有MVVM框架。这比我上面讨论的框架涵盖的内容更多。它是一个优秀的框架,利用了Bill Kempf优秀的缟玛瑙项目中涵盖的概念。Onyx旨在补充MVVM框架,并增加了在MVVM/WPF中通常很难实现的功能。同样,最初仅打算用于WPF, Onyx已经发展到包括SL兼容性—我特别自豪地参与了这项工作。

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

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

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

还可以看看:

这份原稿,缟玛瑙 !

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

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

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

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

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

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

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

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

还有nRoute

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

总而言之,我90%通过我的应用程序,我所使用的MVVM工具包是工厂函数,它为我构建了一个命令,给定一个委托函数,在执行中启动。 我想我可以在几个小时内切换到任何其他框架或没有框架

混合你自己的!

我使用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的处理程序

•单元测试随框架而来

有把握的事情

•作者:Sacha Barber

•不支持Silverlight (Cinch版本2支持Silverlight)

文档:优秀,在CodeProject上发表了6篇文章

•托管:CodePlex

•许可证:代码项目开放许可证

•特点:

  1. 附加的行为

  2. 使用IDataErrorInfo进行验证

  3. 支持IEditableObject

  4. 弱事件创建和订阅

  5. 使用弱事件的中介消息传递

  6. IOC/DI支持(使用Unity)

  7. 服务:事件记录器,消息框,打开保存对话框,弹出

  8. 线程助手

  9. 支持菜单项

  10. closeable视图模型

  11. MVVM代码生成器

MVVM Light Toolkit

•作者:劳伦特•巴尼翁

•Silverlight支持:是的

•文档:Laurent的博客上有很多文章,其他开发者也有

•托管:CodePlex

•License: MIT License

•特点:

  1. MSI安装程序

  2. VS项目和项模板

  3. VS代码片段

  4. 用于视图模型间通信的信使系统

  5. 将事件作为命令处理

MVVM助手

•作者:马克·史密斯

•不支持Silverlight

文档:马克博客上的一些文章

•托管:个人网站

•许可:未定义

•特点:

  1. 附加的行为

  2. 使用标记扩展创建视图模型

  3. 基于属性的验证

  4. IOC/DI使用ServiceProvider方法

  5. closeable视图模型

  6. 等待游标(使用新的WaitCursor(){//这里的代码})

MVVM基金会

•作者:乔什·史密斯

•不支持Silverlight

文档:在Josh或Marlon Grech的博客上有关于Messenger实现的文章

•托管:CodePlex

•许可:MS-PL

•特点:

  1. 用于视图模型间通信的信使系统

  2. PropertyChanged事件监视器

这份原稿

•作者:罗伯·艾森伯格

•Silverlight支持:是的

文档:完整的在线文档

•托管:CodePlex http://www.codeplex.com/caliburn

•License: MIT License

•特点:

  1. 命令构建在action之上,因此共享许多相同的功能,包括多个输入参数、过滤器和自动异步执行

  2. 处理UI生命周期问题的演示器,例如处理各种UI组件的激活、去激活和关闭语义

  3. Caliburn应用程序是完全可测试的

  4. 各种实用程序,如后台任务管理器

  5. 支持各种UI模式(不仅仅是MVVM)

  6. 依赖注入容器

缟玛瑙

•作者:威廉·肯普夫

•不支持Silverlight

•文档:CodePlex上的基本介绍

•托管:CodePlex

•License:未指定

•特点:

  1. ServiceLocator模式

  2. 使用自定义标记扩展创建ViewModel

  3. UI相关服务,如IDisplayMessage

•作者:丹尼尔·沃恩

•不支持Silverlight

文档:关于CodeProject的2篇非常详细的文章(第1部分和第2部分)

•托管:CodePlex

•许可:使用、复制、修改和/或分发并保留版权!

•特点:

  1. 模块管理器用于在运行时启用或禁用模块

  2. 消息传递服务,用于使用相同的API从客户端或服务器与用户交互

  3. 命令服务将WPF ic命令与内容接口关联起来,这些内容接口只有在活动视图或视图模型实现该接口时才会激活

  4. 工具栏和菜单的区域适配器

  5. 客户端-服务器日志记录准备开箱即用

  6. 包括模块,如Web浏览器,文本编辑器,输出窗口,以及更多

  7. 带有脏文件指示的选项卡接口(跨模块可重用)

nRoute

•作者:Rishi

•Silverlight支持:是的

•文档:作者博客上有很多文章(参见CodePlex项目主页上的链接)

•托管:CodePlex

•许可:MS-PL

•特点:

  1. 支持Blend3行为和触发器模型

  2. 资源定位器框架

  3. 查看服务:OpenFileDialog, ShowMessage…

  4. 使用属性将View和ViewModel映射在一起

Nito MVVM

•作者:沙玛

•不支持Silverlight

•文档:无

•托管:CodePlex

•License:未指定

•特点:

  1. ICommand接口的各种MVVM友好实现

海洋

•作者:Karl Shifflet

•不支持Silverlight

文档:卡尔博客上的文章

•托管:个人网站

•License:未指定

•特点:

  1. 用VB编写。网

  2. 基于属性的验证

  3. 视图模型基类:relaycommand, closeableviewmodel…

  4. SQL server数据访问层

基本的MVVM框架

•作者:莱斯特•洛博

•不支持Silverlight

文档:库中提供的示例应用程序

•托管:CodePlex

•许可:MS-PL

•特点:

  1. 授权命令\ Keybinding

  2. VM之间的消息传递

  3. 将事件作为带有附加行为的命令处理

  4. 将对话框(以及更多)作为服务处理

  5. VS代码片段

GoodLight

•作者:Peter O’hanlon•Silverlight支持:是的

文档:库中提供的示例应用程序

•托管:CodePlex

•许可:MS-PL

•特点:

  1. “工作区”管理(可关闭的文档集)

  2. 皮肤的支持

  3. VM之间的消息传递

还有鸡尾酒和DevForce框架Ideablade