我正在使用telerik RadTreeView來顯示文件夾的層次結構。用戶必須能夠在此樹中添加/刪除/重命名文件夾。這工作到目前爲止,但樹每次更改樹時應按字母順序排序。排序TreeView的節點
排序TreeView我應該排序基礎數據模型。這意味着頂級文件夾和遞歸的所有孩子。
我的底層模型存儲在數據庫中並使用EF進行訪問。它基本上是一個實體「TreeFolder」,其自身與1:n關聯。 EF允許我以EntityCollection的身份訪問TreeFolder的子文件夾。
我的問題在於:我如何排序EntityCollections?到目前爲止,我知道這是不可能的 - 我應該使用像CollectionViewSource這樣的包裝器。這將意味着我需要創建一個新的類「SortableTreeFolder」(或擴展從EF的部分類)持有這樣一個CollectionViewSource。這意味着當樹被加載時,我需要將所有的孩子複製到這個CollectionViewSource中。
是否有可能僅使用EF導航屬性對TreeView模型進行排序?
編輯: 嘗試不同的東西(感謝Uwy)後,我碰到這個部位,以及跌跌撞撞:Sorting EF Collection
有這樣說的:
雖然EntityCollection不實現IList,它實現了IListSource CollectionViewSource將調用IListSource.GetList方法來創建視圖。 EntityCollection.GetList實際上會返回一個不支持排序的IBindingList對象。 因此,默認情況下,EntityCollection的集合視圖不支持排序。
顯然,僅使用EF導航屬性對TreeView模型進行排序是不可能的。除了管理第二個(可排序的)數據結構之外,我仍在尋找解決方法。
默認情況下,WPF項目源綁定回退到'CollectionViewSource.GetDefaultView()'給出的內容(至少在同一個線程中)。你可以嘗試在你的實體上遞歸地添加一個排序描述。 – Uwy
謝謝。我看到應該在ICollectionView中聲明GetDefaultView()。當我檢查我的CollectionView時,雖然沒有這樣的方法,但它也不存在於ICollectionView接口中。 – telandor
我不確定你沒有得到什麼,所以我在一個答案中做了一個示例代碼,讓你知道我的意思 – Uwy