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