最近,我在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并利用其改进的过滤?
发布于 2016-05-23 08:09:28
只需像这样声明ContractsListCollectionView:
public ICollectionView ContractsListCollectionView { get; private set; }或者,如果您确实需要使用ListCollectionView方法,而不仅仅是ICollectionView (请注意ListCollectionView实现了ICollectionView),那么您需要进行强制转换:
ContractsICollectionView = (ListCollectionView) CollectionViewSource.GetDefaultView(Contracts);注意,对于ObservableCollection,CollectionViewSource.GetDefaultView确实返回ListCollectionView --对于其他集合类型,它可能不一样,强制转换将失败。但是,由于您只在ObservableCollection中使用它,所以强制转换是可以的。
https://stackoverflow.com/questions/37385532
复制相似问题