WPF列表<t>排序</t>

时间:2013-08-30 04:59:14

标签: wpf collections

我在这里的第一篇文章。

我有一个列表“&lt;”frameworkelement&gt;我正在填充选择过程。每个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“&lt;”FrameWorkElement&gt;执行此操作。并排序。

以下是我填充List“&lt;”T&gt;的代码。 (SelectedObjects和CopyObjectsCollections是List“&lt;”FrameWorkElement&gt;“列表。

            foreach(FrameworkElement feObject in MainWindow.Data.SelectedObjects)
            {
                MainWindow.Data.CopyObjectsCollection.Add(feObject);
            }

我看过CollectionViewSource和IComparer,但我真的无法理解它。

1 个答案:

答案 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));

通过比较resultorderedResult的值,您可以看到它完美地命令它们。

更新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();