Dig*_*mel 2 sorting wpf collectionviewsource
我一直在寻找这个问题,但我找不到任何可以真正为我解决问题的东西。
SortDescription 集合和 LiveSortingProperties 之间的交互是什么?
LiveSorting 是否依赖于 SortDescriptions 的存在来确定 ASC/DESC 顺序?实时排序属性只是关于要监视哪些属性更改的规范吗?
如果我想更改排序基础,是否需要清除 SortDescription 集合,然后添加新集合并“刷新”视图?
您是否需要 LiveSorting 来处理对底层 ObservableCollection 的添加/删除,或者只是以防集合中已有对象的某些属性发生变化?
SortDescription 集合和 LiveSortingProperties 之间的交互是什么?
来自LiveSortingProperties并CollectionViewSource侦听您的项目(必须实现 INotifyPropertyChanged)以了解特定属性的更改;如果它们发生更改,视图会自动更新。重要的是,您还要IsLiveSortingRequested = true在添加后进行设置LiveSortingProperties,以便它将设置所需的所有内容(侦听器)。它们LiveSortingProperties独立于SortDescriptions,SortDescriptions进行排序并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 的添加/删除,或者只是以防集合中已有对象的某些属性发生变化?
删除/添加是自动处理的,如果启用了属性的实时排序,则它将在所有项目上启用,包括新项目。