我有一个与ObservableCollection
相关联的CollectionChanged
事件。这个CollectionChanged
事件调用了另一个函数,该函数旨在使用原始集合中的项目更新另一个(相同类型的)集合。我已经阅读了其他关于“不能在CollectionChanged事件期间更改ObservableCollection”的帖子,我完全理解为什么不建议在CollectionChanged
事件内修改集合以及为什么这可能会导致循环引用……但在这种特殊情况下,我没有修改原始集合,我只是从中添加了一个项目到另一个无关的集合。
那么我的问题是..我的做法有什么问题吗?我不明白将具有事件绑定的集合中的一项添加到另一个集合中如何再次触发事件并创建循环引用(尽管如果我对此有误,请告诉我)。
此外...有没有任何解决方法?我读过几篇建议在单独的线程上运行此操作的文章,但是当我尝试时,我却得到以下错误。
This type of CollectionView does not support changes to its SourceCollection
from a thread different from the Dispatcher thread.
我只是想更好地理解这里发生了什么。任何建议都将不胜感激。
编辑
按照要求提供简化的例子。
void originalCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
update(originalCollection);
}
private void update(object parameter)
{
foreach (var originalCollectionItem in parameter)
newCollection.Add(originalCollectionItem);
}