2010-02-24 102 views
4

我在調試同事程序並在WPF中遇到此問題。WPF Listbox.selecteditems按照它們被選擇的順序返回項目

它看起來像listBoxName.SelectedItems返回一個選定項目的列表,按照用戶從界面中選擇項目的順序。這是一個問題,因爲我需要保留項目的實際順序。

例子:

列表框在擴展selectmode和我的列表框包含的東西:runfirst,runsecond,runthird

爲用戶提供了一個選項來選擇他們想要運行基於從列表框中的內容。他們選擇runthird然後runfirst。這會導致runthird出現在列表的頂部,然後runfirst。我想我可以在運行foreach之前對列表進行排序,但我想知道是否有更簡單的方法。

謝謝

+0

我想你是對的,但你應該對填充ListBox的列表排序,然後在處理之前對SelectedItems進行排序。 – Dave 2010-02-24 16:27:24

回答

3

是的,我結束了遍歷所有在ListBox中的項目,然後檢查是否有人在使用selecteditems包含如下

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

感謝您的幫助球員

+0

如果您有大量的項目但只有少數選定,也許速度很慢。 – 2013-07-25 08:07:15

1

我想你給了你的問題的答案。

大多數情況下,選定項目的順序無關緊要。既然它爲你做,在處理它們之前對所選項目進行排序似乎是最簡單的解決方案。我無法真正想到更簡單的一種,特別是當排序應該只添加1行時。

您可以使用用於排序原始列表的相同Comparison<T>IComparer<T>。如果您綁定到SelectedItems,則可以使用IValueConverter進行排序。

+0

我接受了關於排序的建議 – Locke12 2010-02-24 17:41:01

9

我所做的是使用LINQ以索引順序返回選定的項目。它使用VB.Net語法,但應該很容易修復C#。

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

使用鏈接可能會起到很好的作用 – Locke12 2010-02-24 17:41:45

相關問題