将MVVM与CollectionViewSource一起使用

时间:2011-11-01 13:41:20

标签: c# wpf data-binding mvvm collectionviewsource

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

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

感谢任何帮助

1 个答案:

答案 0 :(得分:5)

首先,我要说除了你要添加的功能之外,没有必要继承ObservableCollection<T>,我很少(如果有的话)实际需要这样做。

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

在您的视图模型上拥有属性后,您只需将CollectionViewSource绑定到该属性,它就可以完成所有操作。值得注意的是CollectionViewSource实际上并不关心属性的类型,因此您可以将您的集合公开为ICollection<T>IEnumerable<T>或(我相信)甚至作为objectCollectionViewSource仍然会将其视为与ObservableCollection<T>一样公开。

对不起那个稍微散乱的回答。简洁的版本将是“它取决于具体情况”,但在大多数情况下我倾向于遵循这种一般方法。