我试图删除绑定到ObservableCollection的列表框中的选定项目。从列表框(ObservableCollection)中删除选定的项目
var selectedFiles = MyList.SelectedItems;
foreach (cListEntry item in selectedFiles)
{
_myList.Remove(item);
}
“集合被修改;枚举操作可能不会执行”
什么是这样做的正确方法?
我试图删除绑定到ObservableCollection的列表框中的选定项目。从列表框(ObservableCollection)中删除选定的项目
var selectedFiles = MyList.SelectedItems;
foreach (cListEntry item in selectedFiles)
{
_myList.Remove(item);
}
“集合被修改;枚举操作可能不会执行”
什么是这样做的正确方法?
您从无法修改集合,而列举它时,从异常本身可以看出它是。
说明:
当您从的ObservableCollection删除项目,MyList.SelectedItems得到更新,因为ObservableCollecton实施INotifyCollectionChanged。 现在,selectedFiles指向相同的引用,导致修改它。
解决方案
而是创建一个新的列表和枚举,如此,在任何的ObservableCollection变化并不反映回你所列举清单。这将工作:
var selectedFiles = MyList.SelectedItems.Cast<object>().ToList();
foreach (cListEntry item in selectedFiles)
{
_myList.Remove(item);
}
谢谢你的解释和解决方案。我没有意识到这一点。这也似乎工作MyList.SelectedItems.Count!= 0){_ myList.Remove((cListEntry)MyList.SelectedItems [0]);} – Daniel
是的,如果你只想删除单个项目,这将工作。 –
+1以获得正确答案。 :) –
例如,当试图修改绑定到ListBox的ObservableCollection<T>
时会发生这种情况。这是你如何处理是:
ObservableCollection<Employee> itemsToRemove = new ObservableCollection<Employee>();
foreach (Employee item in lsbxNames.SelectedItems)
{
itemsToRemove.Add(item);
}
foreach (Employee item in itemsToRemove)
{
((ObservableCollection<Employee>)lsbxNames.ItemsSource).Remove(item);
}
ObservableCollection<T>
itemsToRemove
,与同T
为您收集您要修改。itemsToRemove
。itemsToRemove
迭代。将ListBox ItemsSource投射到ObservableCollection<T>
,并从中删除itemsToRemove
中的匹配项。参考:http://docs.telerik.com/devtools/wpf/controls/radgridview/managing-data/deleting-entry
那么这将意味着你应该能够做到这一点:
ObservableCollection<cListEntry> itemsToRemove = new ObservableCollection<cListEntry>();
foreach (cListEntry item in MyList.SelectedItems)
{
itemsToRemove.Add(item);
}
foreach (cListEntry item in itemsToRemove)
{
((ObservableCollection<cListEntry>)MyList.ItemsSource).Remove(item);
}
我不知道什么是_myList
,但你并不需要对其进行修改。直接进入ListBox。
http://stackoverflow.com/questions/604831/collection-was-modified-enumeration-operation-may-not-execute –
特别是,阅读此评论.. http://stackoverflow.com/questions/604831/ collection-was-modified-enumeration-operation-may-not-execute#comment13168776_604843 –