这是我在WPF中学习MVVM的链接,我有一个问题: - https://www.tutorialspoint.com/mvvm/mvvm_first_application.htm
WPF窗口的DataContext设置为VIEWMODEL对象 . List-DataTemplate的Itemsource从同一个VIEWMODEL对象设置为List . 该模型包含INotifyPropertyChanged的实现 . 当我更新视图时,MODEL的INotifyPropertyChanged被触发,即VIEW直接更新MODEL,而我迄今所理解的是VIEW仅通过Bindings和Commands与VIEWMODEL交互,而且从不与MODEL DIRECTLY交互 . 它始终是ViewModel它与模型交互以获取View的数据 . 但是在这里,View正在更新Model DIRECTLY . 由于我的知识有限,这让我感到困惑 . 请指导 .
2 回答
如果视图模型通过属性公开模型,则视图实际上可以通过此属性直接绑定到模型 . 这并没有真正违反MVVM模式,并且非常好,特别是如果模型类实现了
INotifyPropertyChanged
接口 . 如果是,您可以说该模型是一种(子)视图模型 .诸如域对象或服务之类的“真实”模型不应该具有关于WPF以及如何将更改通知引发到视图的任何知识 . 因此,直接绑定到此类对象很少有意义,但如果您的模型是“WPF感知”并实现与视图相关的接口,则可以毫无问题地绑定它们 .
将
Model
至列表绑定到View
是一个常见错误 . 正确的方法是始终创建Model
(列表元素)并绑定到它 .例如:
否则,您将打开包含
ModelB
数据的大门,该数据应存储在ViewModelB
中 .