我正在使用MVVM模型开发一个应用程序,但我已经达到了需要选择使用哪个框架的程度。
可能的选项包括:
根据您的经验,哪个更好?
答案 0 :(得分:192)
这实际上取决于您要实现的目标,以及您想要的基础设施数量,以及您可以轻松找到可以帮助您的样本。我将在这里宣布一个兴趣,因为我已经积极参与至少一个MVVM框架,并且我已经通过WPF Disciples小组输入了其他人,所以我有点偏颇。这就是说:
Microsofts 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的框架。
答案 1 :(得分:53)
答案 2 :(得分: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之间进行调解。
答案 3 :(得分:19)
咩。 Mvvm并不需要整个框架来支持IMO。如果您理解这个概念,那么从一个实现INotify的干净VM基类开始就非常简单,只需从那里开始。
答案 4 :(得分:16)
答案 5 :(得分:10)
混合你自己!
我使用了PRISM的EventAggregator,使用了MVVM基础的ViewModelBase等等。我还调整了RelayCommand(在某些地方调用了DelegateCommand)以接受其他数据,依此类推。
我不建议只使用一个框架。
答案 6 :(得分:8)
我的赌注将是Caliburn和MVVMlight,似乎这些mvvm框架中很少有人支持Silverlight。我可以预见会有更多的MVVM框架可供选择,而不是IoC框架,因为设置mvvm框架的功能边界更加困难。我想找出哪一个更适合你的项目的最好方法是列出/比较它们的功能。
同时查看Mix10。我从谈话中学到了很多东西:构建你的mvvm框架。
答案 7 :(得分:6)
答案 8 :(得分:4)
我正在使用Prism并喜欢它。对我来说最重要的事情之一是那里会有其他人可以帮助我,如果需要和好的例子。一旦你掌握了基础知识,你的应用就需要一大堆扩展,当你使用与其他人相同的框架时,它会变得非常容易。
答案 9 :(得分:2)
总而言之,我通过我的应用程序获得了90%的权利,我使用的MVVM Toolkit是工厂函数,它为我创建了一个命令,给定了一个在Execute中启动的委托函数。 我想我可以在几个小时内切换到任何其他框架或没有框架。
答案 10 :(得分:2)
另一个要考虑的是MEFedMVVM。我已经在几个项目中使用它,它是轻量级的,非侵入式的,并且支持Silverlight和WPF。对于那些使用该产品的人来说,它还能够在Blend中支持设计时数据。
答案 11 :(得分:1)
如果您正在寻找可扩展性(能够编写加载项)在WPF / MVVM应用程序框架之上,那么您可能对SoapBox Core 免责声明感兴趣:我写了。它是开源的,所以即使你不使用它,也可能会有一些好的想法。它将MEF用于扩展性和IoC。
答案 12 :(得分:1)
还有nRoute
支持MVVM的WPF / Silverlight非常好的应用程序框架