为什么在模型中需要ObservableCollection和INotifyPropertyChanged?

4
我在msdn上看到,在MVVM模型中,Model通常实现接口,如ObservableCollection<T>INotifyPropertyChangedIDataError

我的问题是为什么要在Model层而不是ViewModel层执行这些操作。 我认为“纯”Model不应该有任何通知逻辑,只有数据和业务逻辑。我的第一印象是VM将包装Model的属性并负责通知。
我承认,在Model中实现这些接口可能会使实现在许多情况下更容易,但我想知道为什么Model应该负责通知。
2个回答

4
INPC是Core框架的一部分,不像ICommand和DependencyObject是专门属于WPF的。之前也有类似的问题关于在服务层公开IQueryable。就像INPC一样,IQueryable是一个核心框架类。为了创建一个纯模型而不使用它们中的任何一个是过度的。

更糟糕的是会导致重复(使VM包装暴露属性只是为了添加属性更改通知)。

另一方面,Observable Collection则不同。通常,域模型中的集合表示实体关系。在许多情况下,您无法控制它们的实例化。这里需要做出权衡。


1
根据您的应用程序,您可能会有多个相同数据的视图和ViewModel。比如说,您有一个窗口显示带只读详细信息的项目列表,但在另一个窗口中,您可以添加、编辑和删除项目。
如果Model使用ObservableCollection和INotifyPropertyChanged,那么在可编辑的View/ViewModel中所做的更改将在不可编辑的View/ViewModel中得到更新。
此外,如果不可编辑的View足够简单,直接公开和绑定到Model可能是可行和可接受的。由于没有ViewModel来处理通知,Model需要自己完成这项工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接