如何从WPF ListView中删除多个所选项?

时间:2012-01-19 15:17:29

标签: wpf listview user-interface

我有一个WPF ListView,里面有很多项目。当我选择其中几个时,我希望能够用一个按钮删除它们。我遇到的问题是我可以从ListView删除一个项目,但是当我第二次迭代时,我得到一个:

收藏被修改;枚举操作可能无法执行。

由于上次删除修改了ItemSource的{​​{1}}而导致错误。做这个的最好方式是什么?我尝试制作所选项目的副本,但我不知道使用什么类型。

4 个答案:

答案 0 :(得分:3)

将所选项目的集合保存在一个不会改变的局部变量中,然后你可以毫无问题地迭代它。

e.g。

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 :(得分:1)

您可以管理要删除的索引列表,然后删除范围。

您的ListView绑定的收集源类型是什么?

答案 2 :(得分:1)

我这样做的首选方法是使用调度程序:

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

答案 3 :(得分:0)

如果您的ListView绑定到自定义引用类型的集合,则我认为这是首选且最简单的方法

YorCustomType[] selected = new YorCustomType[YourListView.SelectedItems.Count];
YourListView.SelectedItems.CopyTo(selected, 0);
foreach (YorCustomType reference in selected)
{
    YourSourceCollections.Remove(reference);
}

这不依赖Linq