2012-01-19 197 views
3

我有一個WPF ListView其中有很多項目。當我選擇其中的幾個時,我希望能夠用一個按鈕刪除它們。我遇到的問題是我可以從ListView中刪除一個項目,但是當我第二次迭代時,我得到:如何從WPF ListView中刪除多個選定的項目?

收集已被修改;枚舉操作可能不會執行。

錯誤,因爲上次刪除修改ListViewItemSource。做這個的最好方式是什麼?我嘗試製作所選項目的副本,但我不知道使用哪種類型。

回答

2

將所選項目的集合保存在不會更改的局部變量中,然後您可以在沒有問題的情況下進行迭代。

例如

var selected = lv.SelectedItems.Cast<Object>().ToArray(); 
foreach (var item in selected) lv.Items.Remove(item); // or whereever you need to remove them... 

Cast<T>ToArrayextension methods

+1

SelectedItems不具有指定者()方法。我似乎無法弄清楚用於局部變量的類型。 – joepetrakovich

+4

ListView.SelectedItems是一個System.Collections.IList,因此沒有ToArray方法。但你可以寫:var selected = new ArrayList(listBox.SelectedItems); – Clemens

+0

就是這樣!謝謝。 – joepetrakovich

1

您可以管理索引列表刪除,然後刪除該範圍。

什麼是您的收集源類型綁定到您的ListView

+0

這是一個ObservableColletion 。 – joepetrakovich

+0

這個答案是最正確的 - 你需要通過它綁定的集合來管理Listview。你會得到一個例外 –

1

我這樣做的首選方法是使用一個調度員:

System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke((Action)(() => 
     { 
      my_Collection.Remove(item); 
     })); 
+2

是的,這將異步刪除一個項目。問題是關於如何刪除其中的幾個。你不會希望一個接一個地異步。 – Clemens

相關問題