我最近在 CodeReview ( CodeReview Question ) 上发布了一个问题,并遵循他们的建议,我正在寻找从 ObservableCollectionICollectionView 再到 ListCollectionView 的方法,因为显然 ListCollectionView 具有更好的过滤性能。

我现在做的是这个;

Contracts = await ReturnContracts();
ContractsICollectionView = CollectionViewSource.GetDefaultView(Contracts);
DataContext = this;

其中 ContractsObservableCollectionContractsICollectionViewICollectionView 。当我使用 ListCollectionView 时,我收到此错误;

无法从 ICollectionView 转换为 ListCollectionView。

这里是 ContractsContractsListCollectionView 的定义;
public ObservableCollection<ContractModel> Contracts;
public ListCollectionView ContractsListCollectionView { get; private set; }

我的问题是如何实现 ListCollectionView 并利用其改进的过滤功能?

最佳答案

只需像这样声明 ContractsListCollectionView:

public ICollectionView ContractsListCollectionView { get; private set; }

或者,如果您真的需要使用 ListCollectionView 方法,而不仅仅是 ICollectionView (注意 ListCollectionView 实现 ICollectionView ),那么您需要进行强制转换:
ContractsICollectionView = (ListCollectionView) CollectionViewSource.GetDefaultView(Contracts);

请注意,虽然对于 ObservableCollection CollectionViewSource.GetDefaultView 确实返回 ListCollectionView - 对于其他集合类型,它可能不相同并且转换将失败。但是,由于您仅将它与 ObservableCollection 一起使用 - cast 很好。

关于c# - 从 ObservableCollection 实现 ListCollectionView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37385532/

10-09 01:19