【问题标题】:How can I replace the default CollectionView of an enumerable collection?如何替换可枚举集合的默认 CollectionView?
【发布时间】:2013-06-20 07:41:28
【问题描述】:

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

var defaultView = CollectionViewSource.GetDefaultView(someCollection);

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

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

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

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

【问题讨论】:

  • 为什么要更改默认视图?只需创建一个新的 ICollectionView 并将其设置为 itemssource
  • 我已经在上面提到了。不过,我只是更清楚地说明了这一点。

标签: c# wpf collections ienumerable listcollectionview


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2021-08-24
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多