nic*_*u09 3 c# silverlight mvvm
如何从silverlight中的observablecollection中删除多个项目.在我的项目中,我有一个数据网格填充多个项目.每行包含一个复选框.如果我通过选择复选框选择多行并单击删除按钮,我想要删除集合中的所有项目.
public void delete(object parameter)
{
foreach (var x in Book)
{
if (x.Ischeck == true)
{
Book.Remove(x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它导致错误.不能改变observablecollection
Fur*_*dar 13
您可以使用下面提到的代码段:
foreach (var x in Book.ToList())
{
if (x.Ischeck)
{
Book.Remove(x);
}
}
Run Code Online (Sandbox Code Playgroud)
要么
for (int i = Book.Count - 1; i >= 0; i--)
{
if (Book[i].Ischeck)
{
Book.RemoveAt(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我假设错误消息有点不同.更确切地说,它是:
收集被修改; 枚举操作可能无法执行.
要解决此问题,一个可能的解决方案是:
foreach (var itemToRemove in Book.Where(x => x.Ischeck).ToList())
{
Book.Remove(itemToRemove);
}
Run Code Online (Sandbox Code Playgroud)
这将获取您要删除的所有项目并将它们放入新列表中.当您现在从中删除项目时,Book不会打扰您当前正在迭代的列表,因为这是一个独立的实例.
Where在调用之前使用会将ToList复制到新列表的引用数量减少到仅需要复制的引用数量.