代码之家  ›  专栏  ›  技术社区  ›  Anders Rune Jensen

可观察集合中的事务支持

  •  3
  • Anders Rune Jensen  · 技术社区  · 14 年前

    我感兴趣的是最有效的方法来更改一个可观察的集合,这样只会触发一个已更改的属性。假设我想用3个项填充列表,没有addCollection方法或类似的方法,所以我必须清除+3次add。我需要创建一个不同的可观察集合并分配吗?或者其他人使用什么技术?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Ray Burns    14 年前

    net框架的 ObservableCollection 类在每个项添加到集合时发送上的单个通知,并且不提供AddRange类型功能的机制。但是,您可以很容易地创建自己的实现 INotifyCollectionChanged 发送你喜欢的任何通知。

    你可能会遇到的问题是 无效集合已更改 接口可以指定在单个消息中向集合添加了多个项,但没有标准的net framework类实际创建这些通知。因此,一些第三方和开源控件在收到添加通知时假设只添加了一个项。即使是内置的net framework类也可能有未发现的与此相关的bug。

    出于这些原因,我建议您的自定义集合具有一种模式,在这种模式下,可以将其设置为始终在 AddRange 而不是单个多项目添加通知。根据实际添加的项目数,可以通过发送多个单个项目添加通知或重置通知来进一步优化此功能。

    当然,在某些情况下,替换 可观测集合 换一个新的。有时这会比循环add()效率低得多,因为事件处理程序和collectionviews是重新生成的。其他时候,如果集合很大,并且循环一次只添加几个项,则效率会更高。 有时候根本不起作用。