MVVM概念中的困境

Pra*_*ari 3 wpf xaml mvvm inotifypropertychanged windows-phone-8

我在MVVM过去两周试图理解,但仍然有很多困惑理解它.

我最近启动了Windows Phone 8开发.

我对MVVM的理解,

M =模型意味着数据,具体是什么意思是模型应该被视为C语言的结构.它只有属性或成员变量(对象).它对View和View Model一无所知.

V =普通XAML.应该只有一种绑定方式,即使用方式DataContext.

VM = View Model是视图的模型.VM使用M来保存其数据(使用容器),VM负责将数据保存在数据库中或从数据库中获取数据.数据库交互应该在VM中进行.VM应该实现INotifyPropertyChanged,因为它负责保存和获取数据.

请注意,我建议我对MVVM有错误的概念.

Mic*_*oon 5

您所说的一切在技术上都是正确的,但我会尝试以更抽象的方式处理设计模式,并考虑它试图解决的问题.MVVM正试图解决在视图和模型之间提供分离以及提供双向绑定的问题(即从模型中提取数据并呈现它,以及获取用户输入并将其保存回模型).

大多数模式都希望将视图和模型分开,因此在MVVM中仍然是相同的,但更为模糊的是如何将数据转换/格式化以便显示给用户,以及如何将用户输入转换为模型.在许多MVC框架中,视图中模型数据的表示处理得很好,但是您通常可以自己进行用户输入并将数据转换回模型.MVVM旨在处理两者.

Microsoft选择使用DependencyProperty,ICommand和ValueConverters之类的东西来做到这一点.基本思想是您的View只会通过绑定松散地附加到ViewModel,因此理论上您可以将ViewModel重用于其他视图.这在另一个方向上是相同的(这种干净的双向绑定是使MVVM与MVC不同的原因),因为你的VM可以通知属性已经改变(这就是为什么你必须实现INotifyPropertyChanged),但VM有不知道视图是否有反应.当您想要重用这些组件时,这非常简单.

因此,了解MS尝试使用MVVM解决的问题,您可以更好地理解为什么像INotifyPropertyChanged这样的东西存在或者ICommand是什么,并希望充分利用MVVM模式.