我应该使用什么样的MVVM框架? [关闭]

问题描述 投票:228回答:13

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

可能的选择包括:

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

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

wpf mvvm frameworks
13个回答
192
投票

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

微软MVVM Toolkit - 这仍处于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兼容性 - 我特别自豪地参与其中。

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

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

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


2
投票

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


2
投票

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


1
投票

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


1
投票

还有nRoute

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


53
投票

我发现这篇文章非常有用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一起映射

它的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之间的消息传递

43
投票

我试着描述Pete最好的答案中遗漏的框架:

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

Prism (Microsoft p&p)是一个框架,它提供的不仅仅是对MVVM模式的支持。该项目的主要目标是帮助您构建模块化WPF和/或Silverlight应用程序。当您只需要实现MVVM模式或者您是.NET / WPF的初学者时,我不会推荐这个项目。另见:Link

WPF Application Framework (WAF)是一个轻量级框架,可以帮助您使用MVVM创建WPF应用程序。它仅适用于WPF,因此不支持Silverlight。与引入Controllers的大多数其他MVVM框架相比,它有点不同。他们负责应用程序工作流程,并在各种ViewModel之间进行调解。


19
投票

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


16
投票

另请看:

CaliburnOnyx


10
投票

混合你自己!

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

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


8
投票

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

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


6
投票

还有Ideablade的鸡尾酒和DevForce框架


4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.