Model-View-ViewModel非常受WPF和Silverlight的欢迎。我一直在用我最近的项目,并且是一个非常大的粉丝。
我知道这是MVP的改进。但是,我想知道WPF(和Silverlight)的独特特性是什么允许MVVM工作,并且使用其他框架或技术来防止(或至少使这种模式变得困难)。
我知道MVVM强烈依赖WPF中强大的数据绑定技术。这是许多文章和博客似乎提到的一个特性,它是WPF提供View与ViewModel强大分离的手段的关键。但是,数据绑定存在于many forms的其他UI框架中。甚至有像Truss这样的项目为.NET中的POCO提供WPF样式的数据绑定。
除了数据绑定之外,哪些功能使WPF和Silverlight特别适合于Model-View-ViewModel?
答案 0 :(得分:7)
DataBinding,命令,控件模板和XAML。
如果不是其中之一,MVVM将变得更加困难,如果不是不可能的话。以ASP.net为例,它有ASPX部分(为了示例相当于XAML),它具有数据绑定,但它没有命令或控制模板,因此MVVM不可能存在。在WinForms中,我们有数据绑定,这就是它,所以也不可能。
答案 1 :(得分:2)
简而言之:它是数据绑定。
根据Data Binding Overview from MSDN:
如果绑定具有正确的设置并且数据提供了正确的通知,那么,当数据更改其值时,绑定到数据的元素会自动更改。数据绑定还意味着如果元素中数据的外部表示发生更改,则可以自动更新基础数据以反映更改。例如,如果用户在TextBox元素中编辑值,则会自动更新基础数据值以反映该更改。
如果正确设置XAML,则只需使用viewmodel与用户界面进行交互。 WPF在viewmodel更改时负责更新UI,并在UI更改时更新viewmodel(例如用户输入)。
答案 2 :(得分:2)
我在MFC,WinForms甚至MATLAB中实现了MVVM的堂兄模式Model-View-Presenter。我同意原帖:WPF非常适合数据绑定,但您可以利用其他平台中的概念(尽管代码更多)。
阅读John Grossman's博客,真正的区别在于用户界面是用不同于业务逻辑的语言编写的。理想似乎是UI开发由“设计师”而不是程序员执行。
这是WPF独有的领域 - 我不知道任何其他适合这一理想的开发环境。
(请注意,我从来没有在一个足够大的团队工作,以保证专门的UI设计师。我不能说这个理想是否真的可以实现。)
答案 3 :(得分:1)
我认为除了强大的数据绑定功能外,还有强大的支持(ICommand)使其适用于WPF和Silverlight。