我正在调试一个同事程序,并在WPF中遇到了这个问题。
看起来listBoxName.SelectedItems按用户从界面中选择项目的顺序返回所选项目的列表。这是一个问题,因为我需要保留项目的实际顺序。
示例:
列表框位于扩展选择模式中,我的列表框包含一些内容:runfirst,runsecond,runthird
用户可以选择从列表框中选择要运行的内容。他们选择了runthird然后runfirst。这会导致runthird出现在列表的顶部,然后runfirst。我想我可以在运行foreach之前对列表进行排序,但我想知道是否有更简单的方法。
由于
答案 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
进行排序。