如何替换可枚举集合的默认CollectionView ?

本文关键字:集合 默认 CollectionView 枚举 何替换 替换 | 更新日期: 2023-09-27 18:19:04

当将枚举对象绑定到ItemsSource或类似对象时,该绑定使用枚举对象的默认视图,我知道您可以使用以下代码获得该视图…

var defaultView = CollectionViewSource.GetDefaultView(someCollection);

这对我们来说非常有效,例如,允许我们在各种集合的默认视图中添加排序。

然而,我们有一个特殊的Collection类,它需要一个特殊的ListCollectionView子类才能正常工作。也就是说,我们如何更改其默认视图,以便在有人直接绑定到集合时返回该视图?

为了解决这个问题,我们创建了一个名为MainView的新属性,它持有我们自定义的ListCollectionView,然后我们将ItemsSource之类的东西绑定到它,但这意味着我们的集合的消费者必须被明确地告知不要直接绑定到集合,而是要绑定到MainView属性,否则他们将获得默认视图。考虑到标准只是直接绑定到集合,这是我们试图避免的潜在问题。

那么,我怎样才能指定我自己的ListCollectionView子类作为我们自定义集合的默认视图呢?

如何替换可枚举集合的默认CollectionView ?

在集合上实现接口ICollectionViewFactory。下面是一个例子:

public class MyCollection : ObservableCollection<MyItem>, ICollectionViewFactory
{
    public ICollectionView CreateView()
    {
        return new MyListCollectionView(this);
    }
}