我需要CollectionViewSource Sorting / LiveSorting Clarification

时间:2017-05-30 22:33:59

标签: wpf sorting collectionviewsource

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

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

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

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

您是否需要LiveSorting来处理基础ObservableCollection的添加/删除,或者只是在集合中已有对象的某些属性发生变化的情况下?

1 个答案:

答案 0 :(得分:2)

  

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

LiveSortingProperties来自CollectionViewSource并监听您的项目(必须实施INotifyPropertyChanged)以更改特定属性;如果它们被更改,则视图会自动更新。在添加IsLiveSortingRequested = true之后设置LiveSortingProperties非常重要,因此它会设置所需的一切(听众)。 LiveSortingProperties独立于SortDescriptionsSortDescriptions执行排序,LiveSortingProperties更新视图。

不胜感激:排序由ICollectionView完成,实时更新由ICollectionViewLiveShaping完成。 CollectionViewSource只是一个调用接口的方法/更改属性的代理。 ListCollectionViewICollectionViewICollectionViewLiveShaping的默认实现。

  

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

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

  

如果我想更改排序依据,请清除SortDescription吗?   收集然后添加新的和"刷新"观点?

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

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

您是否需要LiveSorting来处理添加/删除   基础ObservableCollection或只是在某些属性的情况下   集合中已有的对象会发生变化吗?

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