为什么ICollectionView<T>
没有.Net接口?看ICollectionView
,期待ICollectionView<T>
似乎很明显。
我错过了什么吗?
答案 0 :(得分:3)
ICollectionView仅由CollectionView类实现。 MSDN-documentation指出CollectionView甚至不应该在代码中实例化,而是使用CollectionViewSource-object来获取集合视图。
如果你想在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;
没有IC的ICollectionView的原因可能是因为它没有这样设计。 documentation指出CollectionView旨在为集合提供不同的视图而不更改它:
您可以将集合视图视为绑定顶部的图层 源集合,允许您导航和显示 基于排序,过滤和组查询的集合,都没有 必须操纵底层的源集合本身。
在这方面,您只能查看集合,因此名称为“ViewCollection”。
我认为期待IC的ICollectionView并不是那么明显,因为CollectionView甚至不打算首先实例化(在添加一些排序功能之后,请参阅下面的有趣警告)。
System.Windows.Data警告:52:直接使用CollectionView不是 完全支持。基本功能虽然有些功能,但仍然有效 效率低下,但高级功能可能会遇到已知的错误。 考虑使用派生类来避免这些问题。
我认为该架构设计为基于“只读”级别而不改变其基础数据源,因为这是分组,过滤和导航数据集合主要关注的内容。
但是,如果您想确切知道原因,那么您可能不得不与Microsoft的某个人讨论这个框架的这一部分。