[英]Sorting ObservableCollection by String
我有一个Observable集合,该集合的一个项目有一个标记(字符串)和一个isChecked(布尔值)。
用户可以选择一个标签来对列表进行排序,例如“事件”和/或设置IsChecked。
订购优先级应按以下方式工作:1)isChecked == true 2)标签等于商品标签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
为了能够检索您的条件,我做了以下工作。
// 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);
要与UI的实现以及模型的实现分离,您必须使用CollectionViewSource
可通过以下自定义Comprarer对对象列表进行排序的具体示例:
#2有点棘手。
为此,您可能需要在代码后面添加另一个Public Enumerable,以两个步骤构建代码。
OP,请先弄清楚#2是什么,然后再沿着这条路走。
2标签等于标签
3按标签字母顺序
完全不清楚。 三参考标签。
根据您的评论需求,将清单分为两部分
问题陈述不反映评论。
您不能指望人们阅读评论。
IsChecked = True和Tag ='match'
然后追加
IsChecked = false或Tag!=按标签“匹配”顺序
抱歉,我现在没有时间使用LINQ,老实说,您还没有在出色的问题陈述上付出很多努力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.