【发布时间】:2014-02-06 18:14:19
【问题描述】:
在 C#/WPF 中,提供一个实现 IObservableCollection<ViewModel<T>> 并从模型中环绕 ObservableCollection<T> 的类的最佳方法是什么?
模型可以向底层集合添加/删除 T 元素,或者视图可以从视图模型层添加/删除 ViewModel 元素。
从 MVVM 模式的角度来看,这有什么可疑之处吗?是否有包含这个或类似类的库?
【问题讨论】:
-
只包含
ObservableCollection<MyModel>甚至ObservableCollection<MyViewModel<MyModel>>类型属性的类有什么问题?我一直不明白为什么人们总是想写一些继承自ObservableCollection的东西……就像List,但带有更改通知。你不要覆盖List<T>来创建一个数据类,你也不应该覆盖ObservableCollection<T>(除非它是为了扩展列表/集合的功能) -
@Rachel 我有一个列表视图,其中每个项目都是
ItemModel,我需要将每个项目包装在ItemViewModel中。在 MVVM 模式中,模型不应该直接暴露给视图。 -
“MVVM-Purist”方法是从不将模型暴露给视图,但通常这样做更实用,因此任何一种方法都有效。即使你想坚持这种设计模式,我仍然不明白你为什么要覆盖
ObservableCollection。您的 ViewModel 应该包含ObservableCollection<SomeViewModel>类型的属性,而SomeViewModel应该公开SomeModel的属性 -
@dbkk:只要您在将数据发送到服务器之前验证数据,我认为 View 看到一些模型部件没有太大问题。
-
@jberger 当然,有多种方法可以给猫剥皮,但我想知道从 MVVM 的角度来看哪种方法是可取的。
标签: c# wpf mvvm design-patterns