【发布时间】:2013-03-22 17:17:31
【问题描述】:
我有一个关于按多列对列表进行排序的问题。在下面的示例中,即使我排序显示None, A First Description, B Second...,列表仍然按照插入的顺序打印。
List<MySample> samples = new List<MySample>();
samples.Add(new MySample { SortOrder = 1, Data = "A First Description", Description = "A First Description" });
samples.Add(new MySample { SortOrder = 1, Data = "C Third Description", Description = "C Third Description" });
samples.Add(new MySample { SortOrder = 1, Data = "B Second Description", Description = "B Second Description" });
samples.Add(new MySample { SortOrder = 0, Data = "None", Description = "None" });
samples.OrderBy(a => a.SortOrder).ThenBy(a => a.Description).ToList();
foreach (var item in samples)
{
Console.WriteLine(item);
}
public class MySample
{
public int SortOrder { get; set; }
public string Description { get; set; }
public object Data { get; set; }
}
如果我更改我的代码以执行以下操作,那么它会按所需的顺序打印。
samples = samples.OrderBy(a => a.SortOrder).ThenBy(a => a.Description).ToList();
可以在不分配的情况下完成订购吗(如上)?
仅供参考,此示例不是实际代码。我需要通过使用FrameworkElementFactory 后面的代码将此列表数据绑定到WPF 中的ComboBox。
感谢您的帮助!
更新我的方法:
var collectionView = CollectionViewSource.GetDefaultView(<My list to be sorted>);
collectionView.SortDescriptions.Add(new SortDescription("SortOrder", ListSortDirection.Ascending));
collectionView.SortDescriptions.Add(new SortDescription("Description", ListSortDirection.Ascending));
以上内容在 UI 中发挥了作用。我感谢所有人的快速回答。
【问题讨论】:
-
List提供了一个不需要赋值的Sort函数,但它更复杂,因为它涉及到编写自己的比较器。 -
一个基本问题。所有的答案都非常有帮助。我不确定在这种情况下如何选择正确答案?
标签: c# wpf list sorting combobox