是否应该将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相关问答推荐

API响应返回null错误. NET MAUI

.NET 7,8 System.Text.Json反序列化多态参数

节省用户在整个应用程序中使用的Flutter

如何在AutoMapper中添加自定义方法到项目中?

AutoMapper在实体框架查询后不知从哪里带来数据

当 Func 委托需要接口作为参数时,它是如何工作的?

如何判断属性设置器是否公开

为什么不能使用 null 作为 Dictionary 的键?

.NET 的 Visual Studio 调试器提示和技巧

来自奥尔森时区的 .NET TimeZoneInfo

Silverlight 与 Flex

C# 方法可以定义为采用的最大参数数是多少?

在 C# 中与块等效?

MemoryStream.Close() 或 MemoryStream.Dispose()

X509Certificate 构造函数异常

如何在 RabbitMQ 中设置重试次数?

铸造:(NewType)与对象作为NewType

绑定在代码隐藏中定义的对象

浮动与双重性能

System.ServiceModel 在 .NET Core 项目中找不到