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

Mar*_*eIV 3 c# collections wpf ienumerable listcollectionview

将枚举绑定到ItemsSource或类似物时,绑定使用枚举的默认视图,我知道您可以使用以下代码获取...

var defaultView = CollectionViewSource.GetDefaultView(someCollection);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

小智 7

在您的集合中,实现接口ICollectionViewFactory.这是一个例子:

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