我的第一篇文章.
我有一个列表“<”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,但我真的没有任何意义.
最佳答案 我可能错过了您的问题,但如果您只想对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扩展方法.使用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();