将MVVM与CollectionViewSource一起使用

Sea*_*VDH 0 c# data-binding wpf mvvm collectionviewsource

我正在尝试使用CollectionViewSource来显示一些数据,我看到的所有示例/教程都有一个自定义类,它们在另一个类中使用,它继承自ObservableCollection.我是使用CollectionViewSource的新手,这只是我的第三个MVVM实现,所以我可能会误解编程模式,但我的问题是:我在哪里放置ObservableCollection类和/或自定义类?

我觉得他们应该进入模型,但后来我不确定什么被绑定到View.我只是将它们构建为外部类,然后在Model/ViewModel中引用它们吗?

任何帮助表示赞赏

Ste*_*rex 5

首先,我会说没有必要继承,ObservableCollection<T>除非你为它添加我很少(如果有的话)实际需要做的功能.

在大多数情况下,我创建了类型的ViewModel属性,ObservableCollection<T>然后在加载数据时从Model中填充它们.这样做的好处是模型不需要使用ObservableCollection<T>(它可以是任何IEnumerable<T>),这意味着稍后当我(几乎不可避免地)想要在另一个特定于实例的视图模型中包装我从模型中返回的任何内容时,我就是只是有义务改变我现有的视图模型类.

在视图模型上拥有属性后,您可以简单地将您的CollectionViewSource属性绑定到该属性,它将从那里完成所有操作.值得注意的是,CollectionViewSource实际上并不关心属性的类型,所以你可以将你的集合暴露给视图ICollection<T>,IEnumerable<T>或者(我相信)即使作为一个,object并且CollectionViewSource它仍然会像对待它一样对待它作为一个ObservableCollection<T>.

对不起有点散漫的答案.简洁的版本将是"它取决于具体情况",但在大多数情况下我倾向于遵循这种一般方法.