首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF list<t>排序

WPF list<t>排序
EN

Stack Overflow用户
提问于 2013-08-30 12:59:14
回答 1查看 9.3K关注 0票数 4

我在这里的第一个帖子。

我有一个用select进程填充的列表“<”frameworkelement>。每个frameworkelement都有一个保存其ZOrder的uid。

我需要按ZOrder从低到高对它们进行排序。我可以使用列表框并添加Uid,如下所示:

代码语言:javascript
复制
            //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>“列表)的代码。

代码语言:javascript
复制
            foreach(FrameworkElement feObject in MainWindow.Data.SelectedObjects)
            {
                MainWindow.Data.CopyObjectsCollection.Add(feObject);
            }

我看过CollectionViewSource和IComparer,但我真的搞不懂它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-30 16:51:41

我可能读错了您的问题,但是如果您只想对List<T>进行排序,那么为什么不使用LinQ OrderBy方法呢?

代码语言:javascript
复制
MainWindow.Data.CopyObjectsCollection = 
    MainWindow.Data.CopyObjectsCollection.OrderBy(f => f.Uid).ToList();

如果这对您的需求进行了错误的排序,那么您可以使用以下命令:

代码语言:javascript
复制
MainWindow.Data.CopyObjectsCollection = 
    MainWindow.Data.CopyObjectsCollection.OrderByDescending(f => f.Uid).ToList();

更新>>>

OrderBy是一种LinQ扩展方法。将using System.Linq;添加到您的类的顶部以使用它。fFrameworkElement对象的一个实例相关。上面的lambda表达式基本上意味着“使用Uid属性值进行排序”。

更新2 >>>

OrderBy方法不会更改原始集合...这就是我的示例将集合设置为OrderBy方法的结果的原因。请参阅此基本示例:

代码语言:javascript
复制
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));

通过比较resultorderedResult的值,您可以看到这很好地对它们进行了排序。

更新3(希望是最后一个) >>>

伙计,你需要学习Lambda表达式...有关更多信息,请查看MSDN的Lambda Expressions (C# Programming Guide)页面。

代码语言:javascript
复制
elements = elements.OrderBy(f => f.Uid).ToList();

此Lambda表达式中的f在“=>”之前在此表达式中声明。用一个字母来命名这些参数是相当标准的,比如Exceptions,但是我们可以给它起任何名字:

代码语言:javascript
复制
elements = elements.OrderBy(frameworkElement => frameworkElement.Uid).ToList();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18525253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档