我有一个WPF ListView
,里面有很多项目。当我选择其中几个时,我希望能够用一个按钮删除它们。我遇到的问题是我可以从ListView
删除一个项目,但是当我第二次迭代时,我得到一个:
收藏被修改;枚举操作可能无法执行。
由于上次删除修改了ItemSource
的{{1}}而导致错误。做这个的最好方式是什么?我尝试制作所选项目的副本,但我不知道使用什么类型。
答案 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...
答案 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