【发布时间】:2010-07-15 12:27:27
【问题描述】:
我想在集合被更改后更新它,但我似乎无法“摆脱”这个异常:
在 CollectionChanged 或 PropertyChanged 事件期间无法更改 ObservableCollection。
在事件处理程序内部,我在更改任何内容以防止无限循环之前取消订阅 Collection changed 事件,并且在进行更改后我再次订阅相同的事件。
private void CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
data.CollectionChanged -= CollectionChanged;
data.Add("Item");
data.CollectionChanged += CollectionChanged;
}
我尝试使用 Dispatcher 调用 data.Add("Item"),但没有成功:(
【问题讨论】:
-
这里最好的解决方案是重新设计你做事的方式 - 在 CollectionChanged 事件处理程序的中间添加一个项目到集合中是不寻常的,无论是否挂钩/取消挂钩处理程序。基本上,这段代码有几种不同的味道。
-
为了更深入地了解我尝试完成的是服务寻呼机。 pager 与集合挂钩,当页面更改时,集合也会更改。那时我向后端请求具有页面索引的数据,当它返回时 - 收集被清除并填充新数据。我使用 Telerik 的 RadQueryableCollectionView,它允许您说集合中有更多项目和总项目数,而没有真正的项目。如果在事件处理程序完成后进行服务调用(异步),则一切正常。但是当使用模拟时 - 数据会立即返回并且你仍然在事件中......
标签: silverlight events exception observablecollection