我有一个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
答案 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对对象列表进行排序的具体示例可以在这里找到:
答案 2 :(得分:0)
#2有点棘手。
为此,您可能需要在代码后面有另一个Public Enumerable,它可以分两步构建。
OP请在我走这条路之前澄清#2是什么。
2标签等于标签
3按字母顺序按标记
根本不清楚。三参考标签。
根据您的评论需要在两组中建立列表 问题陈述不反映评论 你不能指望人们阅读评论。
IsChecked = True且Tag ='match'
然后追加
IsChecked = false或Tag!='匹配'按标签排序
抱歉,我现在没有时间使用LINQ,说实话,你没有在一个好的问题陈述上做出太多努力。