为什么我们去MVVM在MVC或MVP在处理WPF?
什么额外的好处,我们利用这个得到什么?
编辑:
说实话,今天我有一个采访,我一直在问这个问题。 我回答像INotifyPropertyChanged的,ICommand的,IValue转换器..但他并不满足。 从此以后我都忍了这个问题
提前致谢
为什么我们去MVVM在MVC或MVP在处理WPF?
什么额外的好处,我们利用这个得到什么?
编辑:
说实话,今天我有一个采访,我一直在问这个问题。 我回答像INotifyPropertyChanged的,ICommand的,IValue转换器..但他并不满足。 从此以后我都忍了这个问题
提前致谢
我会指出你一个特别有用的视频由杰森Dolinger。
从一个WinForms世界的到来,实施任何MVX风格的图案似乎是更多的麻烦比它的价值,但现在用WPF工作了几年后,我可以诚实地说,我不会考虑任何东西少。 整个模式支持外的开箱。
首先,关键的好处是能够使之间的真正分离view
和model
。 这也就意味着实质是,如果/当你的模式需要改变,它可以在不认为需要以反之亦然。
其次,虽然你的model
可能包含你可能需要在你的所有数据view
,您可能希望抽象的,在这样的数据,你的model
不支持。 例如,假设您的模型包含日期属性。 在模型中可以单独存在,作为一个DateTime
对象,但你的观点可能要提出它在一个完全不同的方式。 如果没有viewmodel
你要么必须重复属性的model
,支持查看或修改它会严重混淆了“模式”的属性。
你也可以使用一个viewmodel
来存在于不同的类/库模型的总部位,以促进一个更流畅的接口,为view
处理。 这是非常不可能的,你会想用数据在你的代码中,用户将要或将要展现给他们的数据相同的方式工作。
最重要的是,你会得到自动的双向数据之间的绑定支持view
和viewmodel
。
真的是的,我可以喋喋不休,但杰森额外的东西一大堆说的它好得多 ,我可以让我的建议是,观看视频。 经过这样的工作了几天,你会怀疑你是怎样获得的,没有它。
祝好运。
这些是我特有的MVVM
另外两种模式是真正的排序中分离出来的,他们处理这些问题方面。 你可以用MVP和MVC使用MVVM(最好样在那里做一些形式的这一点)。
事实上,MVP(W / A被动视图,而不是监督控制器)真的只是一个MVVM的变型,在我看来。
WPF比任何其他UI框架,这MVVM将没有不羁更好的数据绑定
MVVM提供单位可测试性和良好的视野,不可知论,这使得它使用好东西
烤在ICommand的和INotifyPropertyChanged的支持是两个最大的好处。 使用MVVM使得它可以很容易的命令和插头的数据线了到WPF UI。 事情就这样工作。
我personnaly看到MVVM不是一个好处,但对于那些谁想要使用WPF很酷的功能的义务。
WPF是非常非常严重与核心数据结合,从模型使UI的分离建成。 但是,数据绑定在WPF在技术上做的方式有点特殊,因为它依赖于像类:
正因为如此,你就不能真正写一个模型,你要使用标准的.NET技术的方式。 例如,WPF TreeView的是几乎不可能使用的w / o使用数据绑定和模板。 你就不能来填充它只是想从你Winforms中的通用模型,例如会。 它必须使用的ObservableCollection代表一个节点的孩子被绑定到一个层次模型。
所以我们说V代表的XAML代码,它的代码隐藏副本(所以它绑在WPF作为一种技术),并假设M代表模型(所以它不依赖于WPF UI技术,反正)。
好吧,你永远不会有这方面的工作正常WPF下,只有这些V&M。
您必须添加两个之间的事情。 东西是WPF的兼容和理解你的模型。 东西讲的DependencyProperty,和的ObservableCollection INotifyPropertyChanged的。 这就是被称为VM。
作为边注,以MVVM一种替代方法是建立与M为WPF兼容,但仍具有合理的UI独立性一个V&M(W / O VM管道)的组合。 从历史上看,是的ObservableCollection在WindowsBase.dll中组件(附带提供WPF),所以它真的看起来怪异的通用模型绑定的东西绑在用户界面技术。 它已经因为搬回System.dll中。 即便如此,它有时很难保持一个纯粹的虚拟测量模型W / O专门调整了M代表WPF ...
的XAML代码数据绑定的能力,以及触发器是否存在等将打破MVP和MVC模式。