ViewModel应该如何与Model通信,以便两者同步

时间:2012-10-26 03:33:04

标签: c# design-patterns mvvm

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

根据我到目前为止所阅读的内容,大多数文章都显示,由于ViewModel包裹了ModelViewModel可以直接访问Model。在这种情况下,ViewModel可以直接检索和更新Model上的数据。

但是,如果Model中的某些数据不是通过ViewModel更新,会发生什么?在这种情况下,由于ViewModel未观察到或Model数据绑定,ViewModel将无法识别Model中的数据已在外部更改(不是来自ViewModel本身)或当Model与其他模型进行交互并更改其数据时,ViewModel将无法通知View

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

2 个答案:

答案 0 :(得分:2)

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

  

模型类通常通过 INotifyPropertyChanged INotifyCollectionChanged 接口提供属性和集合更改通知事件。这允许它们在视图中容易地数据绑定。表示对象集合的模型类通常派生自 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

答案 1 :(得分:0)

  

如果模型中的某些数据不是通过ViewModel

更新,会发生什么

如果是这种情况,并且如果您希望此更新在模型外部发布 - 您的模型只需实现某些操作(例如,事件)

然后,您的viewmodel可以直接订阅此事件并通知视图。