我有一個WPF ListView
其中有很多項目。當我選擇其中的幾個時,我希望能夠用一個按鈕刪除它們。我遇到的問題是我可以從ListView
中刪除一個項目,但是當我第二次迭代時,我得到:如何從WPF ListView中刪除多個選定的項目?
收集已被修改;枚舉操作可能不會執行。
錯誤,因爲上次刪除修改ListView
的ItemSource
。做這個的最好方式是什麼?我嘗試製作所選項目的副本,但我不知道使用哪種類型。
我有一個WPF ListView
其中有很多項目。當我選擇其中的幾個時,我希望能夠用一個按鈕刪除它們。我遇到的問題是我可以從ListView
中刪除一個項目,但是當我第二次迭代時,我得到:如何從WPF ListView中刪除多個選定的項目?
收集已被修改;枚舉操作可能不會執行。
錯誤,因爲上次刪除修改ListView
的ItemSource
。做這個的最好方式是什麼?我嘗試製作所選項目的副本,但我不知道使用哪種類型。
將所選項目的集合保存在不會更改的局部變量中,然後您可以在沒有問題的情況下進行迭代。
例如
var selected = lv.SelectedItems.Cast<Object>().ToArray();
foreach (var item in selected) lv.Items.Remove(item); // or whereever you need to remove them...
您可以管理索引列表刪除,然後刪除該範圍。
什麼是您的收集源類型綁定到您的ListView
?
這是一個ObservableColletion
這個答案是最正確的 - 你需要通過它綁定的集合來管理Listview。你會得到一個例外 –
我這樣做的首選方法是使用一個調度員:
System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke((Action)(() =>
{
my_Collection.Remove(item);
}));
是的,這將異步刪除一個項目。問題是關於如何刪除其中的幾個。你不會希望一個接一個地異步。 – Clemens
SelectedItems不具有指定者()方法。我似乎無法弄清楚用於局部變量的類型。 – joepetrakovich
ListView.SelectedItems是一個System.Collections.IList,因此沒有ToArray方法。但你可以寫:var selected = new ArrayList(listBox.SelectedItems); – Clemens
就是這樣!謝謝。 – joepetrakovich