从silverlight中的observablecollection中删除多个项目

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)


Dan*_*rth 6

我假设错误消息有点不同.更确切地说,它是:

收集被修改; 枚举操作可能无法执行.

要解决此问题,一个可能的解决方案是:

foreach (var itemToRemove in Book.Where(x => x.Ischeck).ToList())
{
    Book.Remove(itemToRemove);
}
Run Code Online (Sandbox Code Playgroud)

这将获取您要删除的所有项目并将它们放入新列表中.当您现在从中删除项目时,Book不会打扰您当前正在迭代的列表,因为这是一个独立的实例.

Where在调用之前使用会将ToList复制到新列表的引用数量减少到仅需要复制的引用数量.