WPF列表排序

我的第一篇文章.

我有一个列表“<”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();
点赞