2012-12-11 101 views
0

我有一個Observable集合,集合的一個項目有一個標記(字符串)和一個isChecked(布爾)。按字符串排序ObservableCollection

用戶可以選擇標籤來排序列表,例如「事件」和/或設置IsChecked。

的排序優先級應該像這樣工作: 1)==器isChecked真正 2)標籤等於商品標籤的物品 3)其餘按標籤的字母順序排序

我通過顯示在ListBox中的ObservableCollection XAML。 任何想法如何實現?

EDIT: providing example for clarification: 
item0: tag = "apple", isChecked = false; 
item1: tag = "apple", isChecked = true; 
item2: tag = "pineapple", isChecked = false; 
item3: tag = "coconut", isChecked = true; 
item4: tag = "cherry", isChecked = false; 

string is: "cherry" 
outcome: item1, item3, item4, item0, item2 
+0

你嘗試過什麼? 「排序wpf列表框」的第一個谷歌結果是在這個網站上的問題... –

+0

可能的重複的[WPF:排序列表框](http://stackoverflow.com/questions/2136827/wpf-sort-a -list-box) –

+0

我不僅按字段進行排序,還對字符串進行排序:/(發現該解決方案也適用於1和3,但不適用於2) 請參閱示例 – Thypari

回答

2

爲了能夠檢索您的條件,我做了以下。

// Retrieve an IQueryable for the colleciton with your specified conditions 
var query = from c in collection 
      orderby c.IsChecked descending, c.Tag.Equals("cherry") descending, c.obsTag 
      select c; 

// Clear the collection 
collection = new ObservableCollection<myCollectionObject>(); 
// Replace the collection with your IQueryable results 
foreach(myCollectionObject obj in query) { 
     collection.Add(obj); 
} 

如果你想這一切在同一行:

collection = new ObservableCollection<obsCol>(from c in collection 
       orderby c.obsCheck descending, c.obsTag.Equals("cherry") descending, c.obsTag 
select c); 
+0

Thanks!有效 :) – Thypari

1

要從不僅UI,但模型過於執行分開,你必須使用CollectionViewSource

如何對象名單通過一些定製Comprarer排序的具體例子,可以在這裏找到:

WPF: ListCollectionView for sorting, filtering and grouping

+0

是的,但是如何映射排序要求在ViewSource上? –

+0

@HenkHolterman:你有一組對象,你定義一個比較器,你運行那個包含特定sortig規則的比較器,而不是查看源代碼。基本步驟。我證明了與OP具體實施的聯繫。 – Tigran

+0

但#2是標籤等於項目標籤,所以需要傳遞一個值到icomparer和接口似乎並不支持。 – Paparazzi

0

也就是說#2是有點麻煩。

爲此,您可能需要在後面的代碼中擁有另一個公共枚舉,以兩個步驟構建它。

OP請在我走下這條路之前澄清一下#2是什麼。

2標籤按字母順序按標籤

不清楚在人人平等的標籤

3。三個參考標籤。

根據您的意見需要頂部建立兩組列表
問題陳述未反映評論。
你不能指望人們閱讀評論。

=器isChecked True和標籤= '匹配'

然後追加

=器isChecked虛假或標籤!= '匹配' 的標記順序

對不起,我沒有時間對LINQ現在說實話,你在一個很好的問題陳述上沒有表現出很多努力。

+0

2)將字符串varibale與每個項目上的標籤進行比較。如果兩者都相同。這些項目首先列出。 3)不符合1)和2)的所有其他項目按照它們的標籤按字母順序排序。 例如; item0:tag =「apple」; item1:tag =「小時」; item2:tag =「event」... string variable =「event」... Final order:item2,item0,item1 – Thypari