gpt4 book ai didi

wpf - 为什么 ICollectionView 没有 .Net 接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 01:37:40 25 4
gpt4 key购买 nike

为什么ICollectionView<T>没有.Net接口(interface)?正在查看ICollectionView显然可以期待 ICollectionView<T>

我错过了什么吗?

最佳答案

ICollectionView仅由CollectionView类实现。 MSDN-documentation指出 CollectionView 甚至不应该在代码中实例化,而应该使用 CollectionViewSource 对象来获取 Collection View 。

如果你想在 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;

T 之所以没有 ICollectionView 可能是因为它不是这样设计的。 documentation指出 CollectionView 的设计目的是在不更改集合的情况下提供不同的 View :

You can think of a collection view as a layer on top of a binding source collection that allows you to navigate and display the collection based on sort, filter, and group queries, all without having to manipulate the underlying source collection itself.

在这方面,您只能查看集合,因此得名“ViewCollection”,这是有道理的。

我认为期望 T 的 ICollectionView 并不是那么明显,因为 CollectionView 甚至不应该首先实例化(顺便说一下,在添加一些排序功能后,请参阅下面有趣的警告)。

System.Windows.Data Warning: 52 : Using CollectionView directly is not fully supported. The basic features work, although with some inefficiencies, but advanced features may encounter known bugs. Consider using a derived class to avoid these problems.

我认为该架构被设计为在“只读”级别上工作,而无需更改其底层数据源,因为这是数据集合的分组、过滤和导航的主要关注点。

但是,如果您想确切知道原因,您可能需要与负责该框架这一部分的 Microsoft 人员交谈。

关于wpf - 为什么 ICollectionView<T> 没有 .Net 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com