2017-05-30 58 views
0

我一直在尋找這個,但是我找不到任何真正爲我清除它的東西。我需要CollectionViewSource Sorting/LiveSorting澄清

SortDescription集合和LiveSortingProperties之間的交互是什麼?

LiveSorting是否依賴SortDescriptions的存在來確定ASC/DESC順序?活動排序屬性只是一個關於要監視哪些屬性更改的規範?

如果我想改變排序依據,我是否清除SortDescription集合,然後添加新的並刷新視圖?

您是否需要LiveSorting處理對基礎ObservableCollection的添加/刪除操作,或者只是在集合中已有對象的某些屬性更改的情況下?

回答

0

SortDescription集合和 LiveSortingProperties之間的相互作用是什麼?

LiveSortingProperties來自CollectionViewSource,聽你的項目(必須執行INotifyPropertyChanged)的特殊性質的變化;如果它們被更改,則視圖會自動更新。在添加LiveSortingProperties之後,您還要設置IsLiveSortingRequested = true,這一點很重要,因此它將設置所需的一切(聽衆)。 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或以防萬一某些屬性 集合中的對象是否已更改?

刪除/添加是自動處理的,如果啓用了屬性的實時排序,它將在所有項目上啓用,包括新項目。

+0

非常有用,@ Snicker。感謝這樣一個完整的答案。 –