【问题标题】:Changing collection from CollectionChanged event从 CollectionChanged 事件更改集合
【发布时间】: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


【解决方案1】:

问题是您正在取消订阅尚未完成的事件中的事件。退回并重新评估为什么要添加到集合中,并确定是否有其他方法可以完成您需要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多