我在这里的第一篇文章。
我有一个列表“<”frameworkelement>我正在填充选择过程。每个frameworkelement都有一个保存其ZOrder的uid。
我需要通过ZOrder从最低到最高来对它们进行排序。我可以使用列表框并添加Uid这样:
//Add Object Uid's
ListBox lstTempOrder = new ListBox();
foreach(FrameworkElement feObject in MainWindow.Data.SelectedObjects)
{
lstTempOrder.Items.Add(feObject.Uid);
}
//Reorder from 0 to above of the ZIndexes
lstTempOrder.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("", System.ComponentModel.ListSortDirection.Ascending));
但我需要使用List“<”FrameWorkElement>执行此操作。并排序。
以下是我填充List“<”T>的代码。 (SelectedObjects和CopyObjectsCollections是List“<”FrameWorkElement>“列表。
foreach(FrameworkElement feObject in MainWindow.Data.SelectedObjects)
{
MainWindow.Data.CopyObjectsCollection.Add(feObject);
}
我看过CollectionViewSource和IComparer,但我真的无法理解它。
答案 0 :(得分:2)
我可能错过了您的问题,但如果您只想对List<T>
进行排序,那么为什么不使用LinQ
OrderBy
方法?
MainWindow.Data.CopyObjectsCollection =
MainWindow.Data.CopyObjectsCollection.OrderBy(f => f.Uid).ToList();
如果按照你的要求对它进行错误的排序,那么你可以使用它:
MainWindow.Data.CopyObjectsCollection =
MainWindow.Data.CopyObjectsCollection.OrderByDescending(f => f.Uid).ToList();
更新&gt;&gt;&gt;
OrderBy
是一种LinQ
扩展方法。在课程顶部添加using System.Linq;
即可使用它。 f
与您的FrameworkElement
对象的实例有关。上面的lambda表达式基本上是指'使用Uid
属性值排序'。
更新2&gt;&gt;&gt;
OrderBy
方法不更改原始集合...这就是我的示例将集合设置为OrderBy
方法的结果的原因。见这个基本的例子:
List<FrameworkElement> elements = new List<FrameworkElement>();
elements.Add(new FrameworkElement() { Uid = "Object1003-1" });
elements.Add(new FrameworkElement() { Uid = "Object1002-2" });
elements.Add(new FrameworkElement() { Uid = "Object1002-1" });
elements.Add(new FrameworkElement() { Uid = "Object1001-1" });
elements.Add(new FrameworkElement() { Uid = "Object1001-3" });
elements.Add(new FrameworkElement() { Uid = "Object1001-2" });
string result = string.Join(", ", elements.Select(f => f.Uid));
elements = elements.OrderBy(f => f.Uid).ToList();
string orderedResult = string.Join(", ", elements.Select(f => f.Uid));
通过比较result
和orderedResult
的值,您可以看到它完美地命令它们。
更新3(希望是最后一个)&gt;&gt;&gt;
老兄,您需要了解Lambda表达式...有关详细信息,请查看MSDN上的Lambda Expressions (C# Programming Guide)页面。
elements = elements.OrderBy(f => f.Uid).ToList();
此Lambda表达式中的f
在<=>
'之前的此表达式中声明为。用Exceptions
之类的字母命名这些参数是相当标准的,但我们可以为它命名:
elements = elements.OrderBy(frameworkElement => frameworkElement.Uid).ToList();