我正在使用MVVM模型开发一个应用程序,但我已经到了需要选择使用哪个框架的地步。
可能的方案包括:
根据你的经验,哪个更好?
这实际上取决于您想要实现的目标,以及您想要的基础设施的数量,再加上查找示例的难易程度。在这里我要声明一个兴趣点,因为我已经积极参与了至少一个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年)项目模板来实现。
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
混合你自己的!
我使用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的处理程序 •单元测试随框架而来
•ViewModelBase类(用于INotifyPropertyChanged接口的实现)
•RelayCommand类链接UI命令到ViewModel的处理程序
•单元测试随框架而来
有把握的事情
•作者:Sacha Barber •不支持Silverlight (Cinch版本2支持Silverlight) 文档:优秀,在CodeProject上发表了6篇文章 •托管:CodePlex •许可证:代码项目开放许可证 •特点: 附加的行为 使用IDataErrorInfo进行验证 支持IEditableObject 弱事件创建和订阅 使用弱事件的中介消息传递 IOC/DI支持(使用Unity) 服务:事件记录器,消息框,打开保存对话框,弹出 线程助手 支持菜单项 closeable视图模型 MVVM代码生成器
•作者:Sacha Barber
•不支持Silverlight (Cinch版本2支持Silverlight)
文档:优秀,在CodeProject上发表了6篇文章
•托管:CodePlex
•许可证:代码项目开放许可证
•特点:
附加的行为
使用IDataErrorInfo进行验证
支持IEditableObject
弱事件创建和订阅
使用弱事件的中介消息传递
IOC/DI支持(使用Unity)
服务:事件记录器,消息框,打开保存对话框,弹出
线程助手
支持菜单项
closeable视图模型
MVVM代码生成器
MVVM Light Toolkit
•作者:劳伦特•巴尼翁 •Silverlight支持:是的 •文档:Laurent的博客上有很多文章,其他开发者也有 •托管:CodePlex •License: MIT License •特点: MSI安装程序 VS项目和项模板 VS代码片段 用于视图模型间通信的信使系统 将事件作为命令处理
•作者:劳伦特•巴尼翁
•Silverlight支持:是的
•文档:Laurent的博客上有很多文章,其他开发者也有
•License: MIT License
MSI安装程序
VS项目和项模板
VS代码片段
用于视图模型间通信的信使系统
将事件作为命令处理
MVVM助手
•作者:马克·史密斯 •不支持Silverlight 文档:马克博客上的一些文章 •托管:个人网站 •许可:未定义 •特点: 附加的行为 使用标记扩展创建视图模型 基于属性的验证 IOC/DI使用ServiceProvider方法 closeable视图模型 等待游标(使用新的WaitCursor(){//这里的代码})
•作者:马克·史密斯
•不支持Silverlight
文档:马克博客上的一些文章
•托管:个人网站
•许可:未定义
使用标记扩展创建视图模型
基于属性的验证
IOC/DI使用ServiceProvider方法
等待游标(使用新的WaitCursor(){//这里的代码})
MVVM基金会
•作者:乔什·史密斯 •不支持Silverlight 文档:在Josh或Marlon Grech的博客上有关于Messenger实现的文章 •托管:CodePlex •许可:MS-PL •特点: 用于视图模型间通信的信使系统 PropertyChanged事件监视器
•作者:乔什·史密斯
文档:在Josh或Marlon Grech的博客上有关于Messenger实现的文章
•许可:MS-PL
PropertyChanged事件监视器
这份原稿
•作者:罗伯·艾森伯格 •Silverlight支持:是的 文档:完整的在线文档 •托管:CodePlex http://www.codeplex.com/caliburn •License: MIT License •特点: 命令构建在action之上,因此共享许多相同的功能,包括多个输入参数、过滤器和自动异步执行 处理UI生命周期问题的演示器,例如处理各种UI组件的激活、去激活和关闭语义 Caliburn应用程序是完全可测试的 各种实用程序,如后台任务管理器 支持各种UI模式(不仅仅是MVVM) 依赖注入容器
•作者:罗伯·艾森伯格
文档:完整的在线文档
•托管:CodePlex http://www.codeplex.com/caliburn
命令构建在action之上,因此共享许多相同的功能,包括多个输入参数、过滤器和自动异步执行
处理UI生命周期问题的演示器,例如处理各种UI组件的激活、去激活和关闭语义
Caliburn应用程序是完全可测试的
各种实用程序,如后台任务管理器
支持各种UI模式(不仅仅是MVVM)
依赖注入容器
缟玛瑙
•作者:威廉·肯普夫 •不支持Silverlight •文档:CodePlex上的基本介绍 •托管:CodePlex •License:未指定 •特点: ServiceLocator模式 使用自定义标记扩展创建ViewModel UI相关服务,如IDisplayMessage
•作者:威廉·肯普夫
•文档:CodePlex上的基本介绍
•License:未指定
ServiceLocator模式
使用自定义标记扩展创建ViewModel
UI相关服务,如IDisplayMessage
钙
•作者:丹尼尔·沃恩 •不支持Silverlight 文档:关于CodeProject的2篇非常详细的文章(第1部分和第2部分) •托管:CodePlex •许可:使用、复制、修改和/或分发并保留版权! •特点: 模块管理器用于在运行时启用或禁用模块 消息传递服务,用于使用相同的API从客户端或服务器与用户交互 命令服务将WPF ic命令与内容接口关联起来,这些内容接口只有在活动视图或视图模型实现该接口时才会激活 工具栏和菜单的区域适配器 客户端-服务器日志记录准备开箱即用 包括模块,如Web浏览器,文本编辑器,输出窗口,以及更多 带有脏文件指示的选项卡接口(跨模块可重用)
•作者:丹尼尔·沃恩
文档:关于CodeProject的2篇非常详细的文章(第1部分和第2部分)
•许可:使用、复制、修改和/或分发并保留版权!
模块管理器用于在运行时启用或禁用模块
消息传递服务,用于使用相同的API从客户端或服务器与用户交互
命令服务将WPF ic命令与内容接口关联起来,这些内容接口只有在活动视图或视图模型实现该接口时才会激活
工具栏和菜单的区域适配器
客户端-服务器日志记录准备开箱即用
包括模块,如Web浏览器,文本编辑器,输出窗口,以及更多
带有脏文件指示的选项卡接口(跨模块可重用)
nRoute
•作者:Rishi •Silverlight支持:是的 •文档:作者博客上有很多文章(参见CodePlex项目主页上的链接) •托管:CodePlex •许可:MS-PL •特点: 支持Blend3行为和触发器模型 资源定位器框架 查看服务:OpenFileDialog, ShowMessage… 使用属性将View和ViewModel映射在一起
•作者:Rishi
•文档:作者博客上有很多文章(参见CodePlex项目主页上的链接)
支持Blend3行为和触发器模型
资源定位器框架
查看服务:OpenFileDialog, ShowMessage…
使用属性将View和ViewModel映射在一起
Nito MVVM
•作者:沙玛 •不支持Silverlight •文档:无 •托管:CodePlex •License:未指定 •特点: ICommand接口的各种MVVM友好实现
•作者:沙玛
•文档:无
海洋
•作者:Karl Shifflet •不支持Silverlight 文档:卡尔博客上的文章 •托管:个人网站 •License:未指定 •特点: 用VB编写。网 基于属性的验证 视图模型基类:relaycommand, closeableviewmodel… SQL server数据访问层
•作者:Karl Shifflet
文档:卡尔博客上的文章
用VB编写。网
视图模型基类:relaycommand, closeableviewmodel…
SQL server数据访问层
基本的MVVM框架
•作者:莱斯特•洛博 •不支持Silverlight 文档:库中提供的示例应用程序 •托管:CodePlex •许可:MS-PL •特点: 授权命令\ Keybinding VM之间的消息传递 将事件作为带有附加行为的命令处理 将对话框(以及更多)作为服务处理 VS代码片段
•作者:莱斯特•洛博
文档:库中提供的示例应用程序
授权命令\ Keybinding
VM之间的消息传递
将事件作为带有附加行为的命令处理
将对话框(以及更多)作为服务处理
GoodLight
•作者:Peter O’hanlon•Silverlight支持:是的 文档:库中提供的示例应用程序 •托管:CodePlex •许可:MS-PL •特点: “工作区”管理(可关闭的文档集) 皮肤的支持 VM之间的消息传递
•作者:Peter O’hanlon•Silverlight支持:是的
“工作区”管理(可关闭的文档集)
皮肤的支持
还有鸡尾酒和DevForce框架Ideablade