我试图使用CollectionViewSource来显示一些数据,并且我所看到的所有示例/教程都构建了一个自定义类,它们在另一个类中使用,该类继承自ObservableCollection。我对使用CollectionViewSource都是陌生的,这只是我的MVVM的第三个实现,因此我可能会误解编程模式,但是我的问题是:
我在哪里放置ObservableCollection类和/或自定义类?
我觉得他们应该加入模型,但是我不确定是什么绑定(bind)到 View 上。我是否只是将它们构建为外部类,然后在Model/ViewModel中引用它们?
任何帮助表示赞赏
最佳答案
首先,我要说的是没有必要从ObservableCollection<T>
继承,除非您要向ObservableCollection<T>
添加功能,而我实际上很少需要这样做。
在大多数情况下,我会创建ojit_code类型的ViewModel属性,然后在每次加载数据时从Model中填充它们。这样做的好处是,模型不需要使用ObservableCollection<T>
(可以是任何IEnumerable<T>
),这意味着以后当我(几乎不可避免地)想要将我从模型返回的内容包装到另一个特定于实例的 View 模型中时我仅需更改现有的 View 模型类。
在 View 模型上拥有一个属性后,您可以简单地将CollectionViewSource
绑定(bind)到该属性,它将在那里执行所有操作。值得注意的是,CollectionViewSource
实际上并不关心属性的类型,因此您可以将集合作为ICollection<T>
,IEnumerable<T>
或(我相信)以object
和CollectionViewSource
的形式公开给View就像它作为ObservableCollection<T>
公开一样。
抱歉,您的回答有些困惑。简洁的版本将是“取决于情况”,但是在大多数情况下,我倾向于遵循这种通用方法。
关于c# - 将MVVM与CollectionViewSource一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7967359/