Nil*_*han 5 wpf .net-4.0 collectionviewsource
为什么没有 .Net 接口ICollectionView<T>?看着ICollectionView它似乎很明显的期待ICollectionView<T>。
我错过了什么吗?
ICollectionView 仅由 CollectionView 类实现。MSDN文档指出 CollectionView 甚至不应该在代码中实例化,而应该使用 CollectionViewSource 对象来获取集合视图。
如果你想在 CollectionView 中返回你自己的 T 集合,你需要将你自己的集合(实现 IEnumerable)添加到 CollectionViewSource 对象并从那里获取 CollectionView,例如:
List<MyClass> listToView = new List<MyClass>();
MyClass x1 = new MyClass() { Name = "Fictive Name 1", Description = "Description...", Date = DateTime.Now};
MyClass x2 = new MyClass() { Name = "Fictive Name 2", Description = "Description...", Date = DateTime.Now};
MyClass x3 = new MyClass() { Name = "Fictive Name 3", Description = "Description...", Date = DateTime.Now};
listToView.Add(x1);
listToView.Add(x2);
listToView.Add(x3);
CollectionViewSource collectionViewSource = new CollectionViewSource();
collectionViewSource.Source = listToView;
ICollectionView collectionView = collectionViewSource.View;
Run Code Online (Sandbox Code Playgroud)
T 没有 ICollectionView 的原因可能是因为它不是这样设计的。文档指出 CollectionView 的设计目的是在不更改集合的情况下提供不同的视图:
您可以将集合视图视为绑定源集合之上的一层,它允许您基于排序、筛选和组查询来导航和显示集合,而无需操作底层源集合本身。
从这方面来说,您只能查看集合是有道理的,因此名称为“ViewCollection”。
我认为期望 T 的 ICollectionView 并不是那么明显,因为 CollectionView 甚至不应该首先实例化(顺便说一下,在添加一些排序功能后,请参阅下面有趣的警告)。
System.Windows.Data 警告:52:不完全支持直接使用 CollectionView。基本功能可以工作,尽管效率有些低下,但高级功能可能会遇到已知的错误。考虑使用派生类来避免这些问题。
我认为该架构被设计为在基于“只读”的级别上工作,而无需更改其底层数据源,因为这是数据集合的分组、过滤和导航的主要关注点。
但是,如果您想确切知道原因,您可能需要与负责该框架这一部分的 Microsoft 人员交谈。
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |