c# - 将 MVVM 与 CollectionViewSource 一起使用

标签 c# wpf data-binding mvvm collectionviewsource

我正在尝试使用 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>或者(我相信)甚至作为 objectCollectionViewSource仍将其视为暴露为 ObservableCollection<T> .

对不起,有点漫不经心的回答。简洁的版本是“视情况而定”,但在大多数情况下,我倾向于遵循这种通用方法。

关于c# - 将 MVVM 与 CollectionViewSource 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7967359/

相关文章:

c# - LINQ To Entities 包含不区分大小写的搜索

c# - 编写 Visual Studio 插件?

wpf - WPF 样式和派生类无法识别属性

WPF 数据模板和按钮

c# - WPF 数据绑定(bind)需要手动提升

android - 绑定(bind)没有额外参数的 View

java - 是否可以使用构造函数将 Spring Form 绑定(bind)到 Object 或通过自定义编辑器将多个字段映射到单个值?

c# - Assembly.CreateInstance 和安全

c# - 如何提取子字符串并将其替换为不同的值

c# - 通过引用传递在 C# 中是如何工作的?