我应该使用什么样的MVVM框架?

Ran*_*gel 230 wpf frameworks mvvm

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

可能的选择包括:

  • MVVM工具包
  • MVVM基金会
  • WPF应用框架(WAF)
  • 轻MVVM
  • 卡利
  • 肚带
  • 棱镜

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

Pet*_*lon 194

这实际上取决于您要实现的目标,以及您想要的基础设施数量,以及您可以轻松找到可以帮助您的样本.我将在这里宣布一个兴趣,因为我已经积极参与至少一个MVVM框架,并且我已经通过WPF Disciples小组输入了其他人,所以我有点偏颇.说,这里说:

微软MVVM工具包 - 这仍处于alpha阶段.当它最初被释放时,由于它没有做到这一点,它从门徒那里受到了一些野蛮的打击.说,MS正在寻求加强这个框架,所以它是一个值得关注的 - 它还没有准备好.

MVVM Foundation - 啊Josh Smith的框架版本.Josh是MVVM的老兄之一,并且一直是该模式的倡导者和教师.因此,你在其他框架中发现的很多东西都有Josh的指纹.该框架旨在提供MVVM的基础知识,而不是解决一些更深奥的问题.最初这只适用于WPF,但像Laurent Bugnion和我这样的人添加了功能/项目,这意味着这也将是一个Silverlight兼容框架.

WAF - 没有它的经验,所以我不能评论它我害怕.

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

更新 Laurent刚刚通知我,.NET 3.5和.NET 4.0版本兼容功能.Wau要去Laurent.

Cinch - Sacha Barber的优秀WPF唯一MVVM框架.这比我上面谈到的框架更多.这是一个优秀的框架,并利用Bill Kempf优秀的Onyx项目中涵盖的概念.Onyx旨在补充MVVM框架,并增加了人们在MVVM/WPF中很难做到的功能.同样,最初只打算成为WPF,Onyx已经发展到包括SL兼容性 - 我特别自豪地参与其中.

棱镜 - 再一次,我从来没有使用它,但我听到了很多关于它的好东西.

Ocean - Cider团队项目经理Karl Shifflett最近发布了一个功能齐全的WPF MVVM框架.同样,这是一个很好的框架,有很多可以推荐它.

最重要的是,下载不同的框架,看看它们,并根据您的思考方式和您的要求找出哪一个最直观.如果您认为您可能希望从相同的代码库支持Silverlight,则应仅打折WPF框架.

  • +1,很棒的答案.你在日常工作中使用哪一个? (4认同)
  • 我使用的是我们编写的,因为我们对MVVM有非常专业的需求.它很大程度上受到Josh所做的工作的影响,并且我将在不久的将来将其作为开源发布(我正忙着剥离专有位).它被称为Goldlight. (4认同)
  • 嗨Pete,只是想评论MVVM Light Toolkit与WPF 3.5和WPF 4的工作原理和Silverlight 3和Silverlight 4一样.我小心翼翼地尽可能保持功能同步.你对可混合性是正确的,这对我来说是一个主要问题:)干杯,劳伦特 (3认同)
  • 谢谢,很好的答案. (2认同)

Nas*_*loo 54

我发现这篇文章非常有用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. 可关闭的视图模型

  11. MVVM代码生成器

MVVM Light Toolkit

•作者:Laurent Bugnion

•Silverlight支持:是的

•文档:Laurent博客+其他开发人员提供的许多文章

•托管:CodePlex

•许可证:MIT许可证

• 特征:

  1. MSI安装程序

  2. VS项目和项目模板

  3. VS代码片段

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

  5. 将事件作为命令处理

MVVM助手

•作者:马克史密斯

•Silverlight支持:没有

•文档:Mark的博客上的一些文章

•托管:个人网站

•许可证:未定义

• 特征:

  1. 附加行为

  2. 使用标记扩展创建viewmodel

  3. 基于属性的验证

  4. IOC/DI使用ServiceProvider方法

  5. 可关闭的viewmodel

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

MVVM基金会

•作者:Josh Smith

•Silverlight支持:没有

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

•托管:CodePlex

•许可证:MS-PL

• 特征:

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

  2. PropertyChanged事件监视器

卡利

•作者:Rob Eisenberg

•Silverlight支持:是的

•文档:提供完整的在线文档

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

•许可证:MIT许可证

• 特征:

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

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

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

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

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

  6. 依赖注入容器

缟玛瑙

•作者:William e Kempf

•Silverlight支持:没有

•文档:CodePlex上提供的基本介绍

•托管:CodePlex

•许可证:未指定

• 特征:

  1. ServiceLocator模式

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

  3. UI相关服务,如IDisplayMessage

•作者:Daniel Vaughan

•Silverlight支持:没有

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

•托管:CodePlex

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

• 特征:

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

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

  3. 命令服务将WPF ICommands与仅在活动视图或视图模型实现接口时才变为活动状态的内容接口相关联

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

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

  6. 包括模块,例如Web浏览器,文本编辑器,输出窗口等等

  7. 带有脏文件指示的选项卡式界面(可跨模块重复使用)

nRoute

•作者:Rishi

•Silverlight支持:是的

•文档:作者博客上提供了许多文章(参见CodePlex项目主页的链接)

•托管:CodePlex

•许可证:MS-PL

• 特征:

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

  2. 资源定位框架

  3. 查看服务:OpenFileDialog,ShowMessage ......

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

Nito MVVM

•作者:Shammah

•Silverlight支持:没有

•文件:没有

•托管:CodePlex

•许可证:未指定

• 特征:

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

海洋

•作者:Karl Shifflet

•Silverlight支持:没有

•文档:Karl博客上提供的文章

•托管:个人网站

•许可证:未指定

• 特征:

  1. 用VB.Net编写

  2. 基于属性的验证

  3. viewmodel基类:relaycommand,closeableviewmodel ...

  4. SQL服务器数据访问层

基本的MVVM框架

•作者:Lester Lobo

•Silverlight支持:没有

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

•托管:CodePlex

•许可证:MS-PL

• 特征:

  1. 委派命令\ Keybinding

  2. VM之间的消息传递

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

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

  5. VS代码片段

GoodLight

•作者:Peter O'Hanlon•Silverlight支持:是的

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

•托管:CodePlex

•许可证:MS-PL

• 特征:

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

  2. 皮肤支持

  3. VM之间的消息传递


jbe*_*jbe 44

我试着描述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之间进行调解.


Pie*_*ten 19

咩.Mvvm并不需要整个框架来支持IMO.如果您理解这个概念,那么从一个实现INotify的干净VM基类开始就非常简单,只需从那里开始.

  • 这就是许多开发人员开发mvvm库的原因.如果你说的是真的,那么为什么这些开发者会浪费他们的时间呢?为什么这些框架用户会继续使用他们喜欢的mvvm框架?没错,"Mvvm并不需要一个完整的框架来支持IMO".但是没有MVVM框架就没有实际意义. (4认同)
  • -1 IMO为ICommands编写自己的RelayCommand类,一个用于VM间通信的Messenger类,以及您自己的IoC容器,仅提及运行良好的WPF应用程序所需的最基本工具,是一个主要的PITA.您的答案仅适用于最简单的程序. (3认同)

rud*_*ler 16

另请看:

Caliburn&Onyx!


And*_*nea 10

混合你自己!

我使用PRISM的EventAggregator,MVVM基础的ViewModelBase等等.我还调整了RelayCommand(在某些地方调用了DelegateCommand)以接受其他数据,依此类推.

我不建议只使用一个框架.

  • 我恭敬地不同意,当你得到新的加入者时,这种方法的问题就会显现出来 - 项目的进入成本将会高得多,因为内部文档通常不是优先考虑的问题. (19认同)
  • 我可以看到有关文档的要点。但可能不需要开发内部文档。可以将带有文档的外部站点的链接嵌入到代码本身中 (2认同)

小智 8

我的赌注将在Caliburn和MVVMlight上,似乎这些mvvm框架中很少有人支持Silverlight.我可以预见会有更多的MVVM框架可供选择,而不是IoC框架,因为设置mvvm框架的功能边界更加困难.我想找出哪一个更适合你的项目的最好方法是列出/比较它们的功能.

另请查看Mix10.我从谈话中学到了很多东西:构建你的mvvm框架.

  • 我发现说话非常有用.这是一个直接链接:http://live.visitmix.com/MIX10/Sessions/EX15 (4认同)

ram*_*n22 6

此外鸡尾酒和DevForce框架,Ideablade


dav*_*ave 5

我正在使用 Prism 并且喜欢它。对我来说最重要的事情之一是,如果需要,还有其他人可以帮助我,并提供好榜样。一旦你掌握了基础知识,你的应用程序就需要一大堆扩展,当你使用与其他框架相同的框架时,它会变得更加容易。