2009-07-23 94 views
1

我最近偶然發現WPF ListView控件似乎限制了對其項目進行排序的能力。具體來說,我在嘗試使SortDescription識別嵌套屬性(屬性屬性)時遇到了很大的麻煩。WPF ListView - 按嵌套屬性排序

對於由propreties直接的排序,下面一行應該做的工作:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty", 
    ListSortDirection.Ascending)); 

事實上它很適合我。但是,因爲我的ListViewItemSource是(強類型)DataTable,所以某些列綁定到該行的嵌套屬性(即Row.OtherTableRow.SubProperty綁定路徑樣式) - 這是ADO.NET DataSet適用於分層數據庫的方式。

我想什麼做的是這樣的:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty", 
    ListSortDirection.Ascending)); 

但遺憾的是該行拋出ArgumentException

「訂單」式沒有名爲「Row屬性[ID ]',所以不能對數據收集進行排序。

奇怪的是,我沒有任何問題綁定到嵌套屬性。實際上,這些字段在ListView中顯示得非常好......也不會將PropertyGroupDescription添加到listView.GroupDescriptions中給我帶來嵌​​套屬性的任何問題 - 它只是SortDescriptions

這是WPF/ListView控件的限制嗎?作爲框架的一部分,我有沒有辦法獲得支持,還是我會在那裏運氣不好?如果我不幸的是,而且這種不一致是不可避免的,我會非常感謝,如果有人可以提出一個黑客或解決方案嵌套屬性的這種情況。我已經嘗試了一些想法,但都取得了最小的成功。

注:我意識到一個ORM可能很好地解決了我的問題,但恐怕這對於我正在開發的當前項目來說根本不可行。簡單的ADO.NET DataSets將不得不做。

回答

1

根據Windows Presentation Foundation Unleased(Adam Nathan)的說法,您可以將默認視圖轉換爲ListCollectionView,並將自定義IComparer實現設置爲其CustomSort屬性。

+0

乾杯。如果它能很好地涵蓋其他高級場景,我可以看看那本書。 :) – Noldorin 2009-07-23 21:48:49