我在这里的第一个帖子。
我有一个用select进程填充的列表“<”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>和Sort来做这件事。
这是我填充List"<"T> (SelectedObjects和CopyObjectsCollections是List"<"FrameWorkElement>“列表)的代码。
foreach(FrameworkElement feObject in MainWindow.Data.SelectedObjects)
{
MainWindow.Data.CopyObjectsCollection.Add(feObject);
}我看过CollectionViewSource和IComparer,但我真的搞不懂它们。
发布于 2013-08-30 16:51:41
我可能读错了您的问题,但是如果您只想对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();更新>>>
OrderBy是一种LinQ扩展方法。将using System.Linq;添加到您的类的顶部以使用它。f与FrameworkElement对象的一个实例相关。上面的lambda表达式基本上意味着“使用Uid属性值进行排序”。
更新2 >>>
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(希望是最后一个) >>>
伙计,你需要学习Lambda表达式...有关更多信息,请查看MSDN的Lambda Expressions (C# Programming Guide)页面。
elements = elements.OrderBy(f => f.Uid).ToList();此Lambda表达式中的f在“=>”之前在此表达式中声明。用一个字母来命名这些参数是相当标准的,比如Exceptions,但是我们可以给它起任何名字:
elements = elements.OrderBy(frameworkElement => frameworkElement.Uid).ToList();https://stackoverflow.com/questions/18525253
复制相似问题