【问题标题】:I need CollectionViewSource Sorting/LiveSorting Clarification我需要 CollectionViewSource 排序/LiveSorting 澄清
【发布时间】:2017-05-30 22:33:59
【问题描述】:

我一直在寻找这个,但我找不到任何真正为我清除它的东西。

SortDescription 集合和 LiveSortingProperties 之间的交互是什么?

LiveSorting 是否依赖 SortDescriptions 的存在来确定 ASC/DESC 顺序?实时排序属性是否只是对哪些属性要监视更改的规范?

如果我想更改排序依据,是否要清除 SortDescription 集合,然后添加新集合并“刷新”视图?

您是否需要 LiveSorting 来处理对底层 ObservableCollection 的添加/删除,或者只是为了以防集合中已经存在的对象的某些属性发生变化?

【问题讨论】:

    标签: wpf sorting collectionviewsource


    【解决方案1】:

    SortDescription 集合和 LiveSortingProperties?

    LiveSortingProperties 来自CollectionViewSource 并监听您的项目(必须实现 INotifyPropertyChanged)以了解特定属性的更改;如果它们被更改,视图会自动更新。在添加 LiveSortingProperties 之后还要设置 IsLiveSortingRequested = true 很重要,这样它将设置所需的一切(侦听器)。 LiveSortingProperties 独立于 SortDescriptions,SortDescriptions 进行排序,LiveSortingProperties 更新更改视图。

    很高兴知道:排序由ICollectionView 完成,实时更新由ICollectionViewLiveShaping 完成。 CollectionViewSource 只是一个代理,它调用接口的方法/更改属性。 ListCollectionView 是 ICollectionView 和 ICollectionViewLiveShaping 的默认实现。

    LiveSorting 是否依赖 SortDescriptions 的存在 确定 ASC/DESC 顺序?实时排序属性只是一个 规范哪些属性要注意变化?

    正如你所说,LiveSortingProperites 只是观察者:你可以在那里添加你没有排序的属性,当这些属性改变时视图会更新。

    如果我想更改排序基础,是否清除 SortDescription 收藏然后添加新的并“刷新”视图?

    最好的就是这样(微软也在做同样的事情):

        using (collectionViewSource.DeferRefresh())
        {
            collectionViewSource.SortDescriptions.Clear();
            collectionViewSource.SortDescriptions.Add(new SortDescription("Foo"));
        }
    

    您是否需要 LiveSorting 来处理对 潜在的 ObservableCollection 或以防万一 已在集合中的对象发生变化?

    删除/添加是自动处理的,如果启用了属性的实时排序,它将在所有项目上启用,包括新项目。

    【讨论】:

    • 非常有用,@Snicker。感谢您提供如此完整的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2012-07-18
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2021-07-11
    • 2017-11-26
    • 2012-06-02
    相关资源
    最近更新 更多