我最近在 CodeReview ( CodeReview Question ) 上发布了一个问题,并遵循他们的建议,我正在寻找从 ObservableCollection
到 ICollectionView
再到 ListCollectionView
的方法,因为显然 ListCollectionView
具有更好的过滤性能。
我现在做的是这个;
Contracts = await ReturnContracts();
ContractsICollectionView = CollectionViewSource.GetDefaultView(Contracts);
DataContext = this;
其中
Contracts
是 ObservableCollection
, ContractsICollectionView
是 ICollectionView
。当我使用 ListCollectionView
时,我收到此错误;无法从 ICollectionView 转换为 ListCollectionView。
这里是
Contracts
和 ContractsListCollectionView
的定义;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/