我需要 CollectionViewSource Sorting/LiveSorting 说明

I need CollectionViewSource Sorting/LiveSorting Clarification

我一直在搜索这个,但我找不到任何可以真正为我解决问题的东西。

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

LiveSorting 是否依赖 SortDescriptions 的存在来确定 ASC/DESC 顺序?实时排序属性是否只是关于要监视哪些属性发生变化的规范?

如果我想更改排序基础,是否要清除 SortDescription 集合然后添加新集合和"Refresh" 视图?

您是否需要 LiveSorting 来处理 additions/deletions 底层 ObservableCollection 或以防万一集合中已有对象的某些属性发生变化?

What is the interaction between the SortDescription collection and the LiveSortingProperties?

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

很高兴知道:排序由 ICollectionView and the live updating is done by the ICollectionViewLiveShaping. The CollectionViewSource is just a proxy which calls the methods/changes properties of the interfaces. The ListCollectionView 完成,是 ICollectionViewICollectionViewLiveShaping 的默认实现。

Does LiveSorting rely on the existence of SortDescriptions to determine ASC/DESC order? Are the live sorting properties just a specification on which properties to watch for changes?

如您所说,LiveSortingProperites 只是观察者:您可以在其中添加您未排序的属性,当这些属性发生变化时视图将更新。

If I want to change the sort basis, do I clear the SortDescription collection and then add new ones and "Refresh" the view?

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

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

Do you need LiveSorting to handle additions/deletions to the underlying ObservableCollection or just in case certain properties of objects already in the collection change?

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