我在msdn上看到,MVVM中的模型通常会实现ObservableCollection<T>
,INotifyPropertyChanged
和IDataError
等接口。
我的问题是为什么这是在模型级别而不是ViewModel级别完成的。我希望“纯”模型不会有任何通知逻辑,只有数据和业务逻辑。我的第一印象是VM将包装Model的属性并处理通知。
我欣然承认在模型中实现这些接口可能会在很多情况下使实现更容易,但我正在寻找一个解释为什么模型应该负责通知。
答案 0 :(得分:4)
INPC是Core框架的一部分,不像ICommand和DependencyObject特别属于WPF。有关从服务层公开IQueryable的类似问题。就像INPC一样,IQueryable是一个核心框架类。为了创造一个纯粹的模型而不使用其中任何一个都是过度的。
更糟糕的是它会导致重复(使VM换行公开属性只是为了添加一个propertychanged通知)。
另一方面,可观察的收藏是一种不同的野兽。通常,域模型中的集合表示实体关系。在许多情况下,您无法控制其实例化。那里需要做出权衡答案 1 :(得分:1)
根据您的应用程序,您可能拥有相同数据的多个视图和ViewModel。假设您有一个窗口显示包含只读详细信息的项目列表,但在另一个窗口中,您可以添加,编辑和删除项目。
如果模型使用ObservableCollection
和INotifyPropertyChanged
,则可在不可编辑的View / ViewModel中查看和更新可编辑View / ViewModel中所做的更改。
此外,如果不可编辑的视图足够简单,则可以直接公开并直接绑定到模型。由于没有ViewModel来处理通知,因此Model需要自己完成工作。