2

在 MVVM 设计中,应该如何与ViewModel进行通信以Model使两者同步?

从我目前所阅读的内容来看,大多数文章都表明,由于ViewModel包装了ModelViewModel可以Model直接访问 。在这种情况下,ViewModel可以直接检索和更新Model.

但是,如果 中的某些数据Model不是通过ViewModel? 在这种情况下,由于ViewModel没有观察或数据绑定到Model,因此ViewModel不会知道 中的数据Model已在外部更改(不是来自 ViewModel 本身)或当Model与其他模型交互并更改其数据时,并且ViewModel不会通知的View

那么,应该如何ViewModel与the进行通信以Model使两者同步呢?

4

2 回答 2

2

该模型应实现 INotifyPropertyChanged 接口。然后 ViewModel 可以订阅相应的事件并在模型更改时触发其自己的 PropertyChanged 通知,以便更新视图。

模型类通常通过INotifyPropertyChangedINotifyCollectionChanged接口提供属性和集合更改通知事件。这使它们可以轻松地在视图中绑定数据。表示对象集合的模型类通常派生自ObservableCollection类。

取自http://msdn.microsoft.com/en-us/library/gg405484%28PandP.40%29.aspx

为了不让 INotifyChanged 的​​东西弄乱你的模型(和其他任何东西),我建议使用Notify Property Weaver Extension:http: //visualstudiogallery.msdn.microsoft.com/bd351303-db8c-4771-9b22-5e51524fccd3

于 2012-10-26T08:16:29.533 回答
0

如果 Model 中的某些数据不是通过 ViewModel 更新会发生什么

如果是这种情况,并且您希望将此更新发布到模型之外 - 您的模型只需实现一些东西即可(例如事件)

然后,您的视图模型可以简单地订阅此事件并通知视图。

于 2012-10-26T06:14:30.063 回答