ebp*_*bpa 11 c# observablecollection
我希望能够在将一些项目添加到ObservableCollection后拒绝它们.我无法继承ObservableCollection或使用任何类型的视图,所以我似乎只限于使用定义的一个事件处理程序(CollectionChanged)对禁止的项目执行.Remove().如果项目在提升和处理事件之间的短时间内存在,那就没关系了; 这些物品应该不会留在集合中.在CollectionChanged事件处理程序中调用.Remove()似乎不被允许.在运行时.NET抛出InvalidOperationException:
"在CollectionChanged事件期间无法更改ObservableCollection."
我个人认为.NET应该允许我这样做.如果我创建一个无限循环,这是我自己的错误.
我想使用的代码如下:
myCollection.CollectionChanged += (sender, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Remove)
return;
foreach (var itm in myCollection)
{
if (itm.name == "Fred")
myCollection.Remove(itm);
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定我有什么选择.使用调度程序似乎不起作用.触发另一个事件并将.Remove调用放在另一个处理程序中是另一个想到的选项.
Raj*_*han 17
使用Observable Collection查看常见错误.
话虽如此,如果你仍然想要走这条路 - 你可以旋转一个新线程
tam*_*tam 13
如果你真的想要修改一个集合,你将想要遍历集合的副本.因为你试图修改foreach循环中的集合,这会让你感到悲伤.
例
var copy = new ObservableCollection<YourType>(collection)
foreach(var item in copy)
{
if(item.Name == "Fred")
{
collection.Remove(item);
}
}
Run Code Online (Sandbox Code Playgroud)
那就是说,我同意Anurag你不应该用observablecollection来做这类事情,当然也不应该在CollectionChanged事件中.
| 归档时间: |
|
| 查看次数: |
40085 次 |
| 最近记录: |