WPF Listbox.selecteditems按照选择的顺序返回项目

时间:2010-02-24 15:57:22

标签: c# wpf listbox

我正在调试一个同事程序,并在WPF中遇到了这个问题。

看起来listBoxName.SelectedItems按用户从界面中选择项目的顺序返回所选项目的列表。这是一个问题,因为我需要保留项目的实际顺序。

示例:

列表框位于扩展选择模式中,我的列表框包含一些内容:runfirst,runsecond,runthird

用户可以选择从列表框中选择要运行的内容。他们选择了runthird然后runfirst。这会导致runthird出现在列表的顶部,然后runfirst。我想我可以在运行foreach之前对列表进行排序,但我想知道是否有更简单的方法。

由于

3 个答案:

答案 0 :(得分:9)

我所做的是使用LINQ以索引顺序返回所选项目。它采用VB.Net语法,但应该很容易修复C#。

Dim selecteditems = From selecteditem As ListBoxItem In ListBox1.SelectedItems _
                    Select selecteditem _
                    Order By ListBox1.Items.IndexOf(selecteditem)

答案 1 :(得分:3)

是的,我最终迭代了列表框中的所有项目,然后检查它是否在选择项目中使用如下所示

            foreach (<yourobject> item in listForSelection.Items)
            {
                if (listForSelection.SelectedItems.Contains(item))
                {
                     \\code here
                }
            }

感谢帮助人员

答案 2 :(得分:1)

我认为你在问题中给出了答案。

大多数情况下,所选项目的顺序无关紧要。既然它适合您,在处理它们之前对所选项目进行排序似乎是最简单的解决方案。我真的不能想到一个更简单的,特别是当排序应该只添加1行。

您可以使用用于对原始列表进行排序的Comparison<T>IComparer<T>。如果您绑定到SelectedItems,则可以使用IValueConverter进行排序。