2011-08-10 38 views
4

我读过msdn,MVVM中的模型实现接口如ObservableCollection<T>,INotifyPropertyChangedIDataError是很常见的。为什么在Model中有ObservableCollection和INotifyPropertyChanged?

我的问题是为什么这是在模型级而不是ViewModel级完成的。我希望“纯粹”模型不会有任何通知逻辑,只有数据和业务逻辑。我的第一印象是VM将包装Model的属性并处理通知。

我很欣然承认,在模型中实现这些接口可能会在许多情况下使实现更容易,但我正在寻找关于为什么模型应负责通知的解释。

回答

4

INPC是核心框架的一部分,与ICommand和DependencyObject属于WPF不同。有关于从服务层公开IQueryable的类似问题。就像INPC一样,IQueryable是一个核心框架类。不使用它们中的任何一个来努力创建纯模型是过度的。

更糟糕的是,它会导致重复(使VM包装公开属性只是为了添加属性已更改的通知)。

另一方面,可观察集合是一个不同的野兽。通常,域模型中的集合表示实体关系。在很多情况下,您无法控制其实例化。这里有一个权衡

1

根据您的应用程序,您可能有多个相同的数据视图和ViewModels。假设您有一个窗口显示具有只读详细信息的项目列表,但在另一个窗口中您可以添加,编辑和删除项目。

如果模型使用ObservableCollectionINotifyPropertyChanged,则在可编辑的View/ViewModel中所做的更改将在不可编辑的View/ViewModel中看到和更新。此外,如果不可编辑的视图足够简单,那么仅仅直接公开并直接绑定到模型就可能并且可以接受。由于没有ViewModel来处理通知,所以Model需要自己完成这项工作。

相关问题