为什么我们在处理WPF时会使用MVM而不是MVC?
使用它可以获得多大的好处?
编辑:
说实话,今天我接受了一次采访,我被问到了这个问题。我的答案像INotifyPropertyChanged,ICommand,IValue Convertor ..但他并不满意。从此我提出了这个问题
提前致谢
答案 0 :(得分:45)
我会指出Jason Dolinger特别有用的video。
来自WinForms世界,实现任何MVX风格模式似乎比它的价值更麻烦但是在与WPF合作几年之后,我可以诚实地说我不会考虑更少。整个范例都是开箱即用的。
首先,关键的好处是在view
和model
之间实现真正的分离。实际意义上的含义是,如果/当您的模型需要更改时,它可以在没有视图需要的情况下反之亦然。
其次,虽然您的model
可能包含view
中可能需要的所有数据,但您可能希望以model
不支持的方式抽象数据。例如,假设您的模型包含日期属性。在模型中,它可以仅作为DateTime
对象存在,但您的视图可能希望以完全不同的方式呈现它。如果没有viewmodel
,您必须复制model
中的属性以支持视图或修改可能会严重模糊“模型”的属性。
您还可以使用viewmodel
来聚合模型中存在于单独的类/库中的部分,以便为view
处理更流畅的界面。 非常不太可能您希望以与用户希望或希望向其呈现数据相同的方式处理代码中的数据。
最重要的是,您支持view
和viewmodel
之间的自动双向数据绑定。
确实有一大堆额外的东西我可以喋喋不休但Jason说它远更好,所以我的建议是观看视频。经过这样的工作几天后,你会想知道如果没有它你会如何度过。
祝你好运。答案 1 :(得分:17)
这些是我特有的MVVM
其他两种模式在他们所关注的问题上实际上是分开的。你可以将MVVM与MVP和MVC一起使用(大多数好的样本都有这种形式)。
事实上,在我看来,MVP(带被动视图,而不是监督控制器)实际上只是MVVM的一种变体。
答案 2 :(得分:5)
WPF具有比任何其他UI框架更好的数据绑定,如果没有
,MVVM将是不可靠的MVVM提供单元可测试性和出色的视图不可知性,这使得使用它成为一件好事
答案 3 :(得分:3)
支持ICommand和INotifyPropertyChanged是两个最大的好处。使用MVVM可以很容易地将命令连接起来并将数据插入WPF UI。事情就好了。
答案 4 :(得分:1)
我个人认为MVVM不是一个好处,而是对那些想要使用WPF酷炫功能的人的义务。
WPF非常强大,内核具有数据绑定功能,可以将UI与模型分离。但是在WPF技术上完成数据绑定的方式有点特殊,因为它与以下类绑定:
因此,您无法使用标准.NET技术以您希望的方式编写模型。例如,使用数据绑定和模板几乎不可能使用WPF TreeView。你不能像Winforms中的通用模型那样填充它。 必须使用ObservableCollection绑定到层次模型,以表示节点的子节点。
所以,让我们说V代表XAML代码及其代码隐藏对应物(因此它与WPF作为一项技术绑定),让我们说M代表你的模型(因此它无论如何都与WPF UI技术无关)。
嗯,你永远不会在WPF下只使用这些V&微米。
您必须在两者之间添加内容。与WPF兼容并了解您的模型的东西。说DependencyProperty,ObservableCollection和INotifyPropertyChanged的东西。这就是所谓的VM。
作为旁注,MVVM的替代方案是构建一个V& M(没有VM管道)组合M与WPF兼容,但仍具有合理的UI独立性。从历史上看,ObservableCollection是在WindowsBase.dll程序集中(随WPF一起提供),因此将通用模型绑定到与UI技术相关的东西真的很奇怪。它从那时起被移回System.dll。即便如此,有时很难保持一个纯VM模型,而不是专门为WPF调整M ...
答案 5 :(得分:0)
XAML代码对数据绑定的能力以及触发器的存在将打破MVP和MVC模式。