我需要 CollectionViewSource 排序/实时排序说明

Dig*_*mel 2 sorting wpf collectionviewsource

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

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

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

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

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

Sni*_*ker 5

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

来自LiveSortingPropertiesCollectionViewSource侦听您的项目(必须实现 INotifyPropertyChanged)以了解特定属性的更改;如果它们发生更改,视图会自动更新。重要的是,您还要IsLiveSortingRequested = true在添加后进行设置LiveSortingProperties,以便它将设置所需的所有内容(侦听器)。它们LiveSortingProperties独立于SortDescriptionsSortDescriptions进行排序并LiveSortingProperties更新更改视图。

值得注意的是:排序是由ICollectionView完成的,实时更新是由ICollectionViewLiveShaping完成的。CollectionViewSource只是一个代理它调用接口的方法/更改属性。ListCollectionView是和默认实现。ICollectionViewICollectionViewLiveShaping

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

正如您所说,它们LiveSortingProperites只是观察者:您可以添加未排序的属性,并且当这些属性更改时视图将更新。

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

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

    using (collectionViewSource.DeferRefresh())
    {
        collectionViewSource.SortDescriptions.Clear();
        collectionViewSource.SortDescriptions.Add(new SortDescription("Foo"));
    }
Run Code Online (Sandbox Code Playgroud)

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

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