是否应该将DataGrid绑定到

ICollectionView = CollectionViewSource.GetDefaultView(collection)

或发送到

ObservableCollection<T> collection; ???

MVVM的最佳实践是什么?为什么?

推荐答案

always绑定到ICollectionView,无论你是否明确.

假设我们有

var collection = new ObservableCollection<string>();
var collectionView = CollectionViewSource.GetDefaultView(collection);

在本例中,绑定到collection或绑定到collectionView是相同的:如果您告诉绑定引擎绑定到collection,则绑定引擎将绑定到默认集合视图(引用等于collectionView).

This means that the answer to your question is "it makes absolutely no difference".

需要明确的是:即使直接绑定到集合,绑定引擎也会绑定到默认视图.修改视图的属性(如排序条件)将影响似乎直接绑定到集合的绑定,因为在封面后面它是到默认视图的绑定.

然而,还有另一个有趣且相关的问题:应该绑定到默认集合视图(即,绑定到集合本身,因为没有理由显式绑定到默认视图)还是绑定到同一集合的另一个视图?

考虑到每个视图都有其自己的当前项概念、排序标准等,因此如果您打算将多个绑定到同一集合,并且绑定控件需要具有不同的当前项、筛选器和公司概念,那么您需要显式绑定到同一基础集合的多个视图.

.net相关问答推荐

从容器化客户端应用程序连接到 OPC-UA 服务器

如何将多个安装程序Bundle 到一个安装程序中?

如何正确使用await using语法?

单线程单元 - 无法实例化 ActiveX 控件

是否可以模拟 .NET HttpWebResponse?

发布版本中的 Debug.WriteLine

使用 Windows 服务和 C# 检测 USB 驱动器插入和移除

.NET 4.0 中有内置的二叉搜索树吗?

是什么让 Enum.HasFlag 这么慢?

如何以编程方式 Select ListView 中的项目?

C# 属性实际上是方法吗?

从 List 到数组 T[] 的转换

如何从 .NET 中的流中获取 MemoryStream?

是否有可用的 WPF 备忘单?

在生产环境中部署调试符号(pdb 文件)有什么风险?

仅使用 XAML 绘制纯色三角形

哪个密码字符在 winforms 文本框中显示黑点 (•)?

为什么要使用 C# 类 System.Random 而不是 System.Security.Cryptography.RandomNumberGenerator?

带有嵌套控件的设计模式

在类型 c# 上切换大小写