按字符串排序ObservableCollection

时间:2012-12-11 14:52:51

标签: c# wpf xaml

我有一个Observable Collection,该集合的一个项目有一个标签(字符串)和一个isChecked(布尔值)。

用户可以选择标签对列表进行排序,例如“event”和/或设置IsChecked。

订购优先顺序应如下: 1)isChecked == true 2)tag等于item标签 3)其余项目按标签按字母顺序排序

我通过xaml在ListBox中显示ObservableCollection。 知道如何实现这一目标吗?

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

要实现与UI的实现以及模型的实现,您必须使用CollectionViewSource

如何通过一些自定义Comprarer对对象列表进行排序的具体示例可以在这里找到:

WPF: ListCollectionView for sorting, filtering and grouping

答案 2 :(得分:0)

#2有点棘手。

为此,您可能需要在代码后面有另一个Public Enumerable,它可以分两步构建。

OP请在我走这条路之前澄清#2是什么。

2标签等于标签

3按字母顺序按标记

根本不清楚。三参考标签。

根据您的评论需要在两组中建立列表 问题陈述不反映评论 你不能指望人们阅读评论。

IsChecked = True且Tag ='match'

然后追加

IsChecked = false或Tag!='匹配'按标签排序

抱歉,我现在没有时间使用LINQ,说实话,你没有在一个好的问题陈述上做出太多努力。