2010-02-12 60 views
3

我感兴趣的是以只激活一个属性的方式更改可观察集合的最有效方法。比方说,我想用3个项目填充列表,没有addCollection方法或类似的东西,所以我必须做清+ 3次添加。我是否需要创建不同的可观察集合并分配?或其他人使用什么技术?在可观察集合中的事务支持

回答

2

NET Framework的ObservableCollection类将作为每个项目添加到集合个人的通知,并且不提供机制的AddRange类型的功能。但是,您可以非常轻松地创建自己的集合,实现INotifyCollectionChanged并发送您喜欢的任何通知。

可能会遇到的问题是INotifyCollectionChanged接口包含指定在单个消息中将多个项目添加到集合中的功能,但没有标准的.NET Framework类实际创建这些通知。因此,一些第三方和开放源代码控件在接收到添加通知时已经添加了一个项目。即使内置的.NET Framework类也可能有与此相关的未发现的错误。

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

当然,在某些情况下,使用新的ObservableCollection更容易。有时这会比循环Add()更有效,因为事件处理程序和CollectionViews被重建。其他时候,如果集合很大,并且循环每次只添加一些项目,则效率会更高。 有时它根本不起作用。

+0

可观察的集合实现ICollectionChanged,但我确定这是你的意思 – 2010-02-13 09:17:29

+0

谢谢雷,你的回答很微妙++ :) – 2010-02-13 12:05:12

+1

@Aran:感谢您的更正。我错了。顺便说一句,它实际上是INotifyCollectionChanged不ICollectionChanged(!而不是我或者已经) – 2010-02-15 18:45:42