在MVVM设计中,ViewModel
应该如何与Model
进行通信,以便两者同步?
根据我到目前为止所阅读的内容,大多数文章都显示,由于ViewModel
包裹了Model
,ViewModel
可以直接访问Model
。在这种情况下,ViewModel
可以直接检索和更新Model
上的数据。
但是,如果Model
中的某些数据不是通过ViewModel
更新,会发生什么?在这种情况下,由于ViewModel
未观察到或Model
数据绑定,ViewModel
将无法识别Model
中的数据已在外部更改(不是来自ViewModel本身)或当Model
与其他模型进行交互并更改其数据时,ViewModel
将无法通知View
。
那么,ViewModel
应该如何与Model
进行通信,以便两者同步?
答案 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可以直接订阅此事件并通知视图。