为什么ObservableCollection不支持批量变化?ObservableCollection支持AddRange或RemoveRange等操作会带来哪些潜在问题?由于ObservableCollection经常与WPF一起使用,因此Microsoft不提供它们一定是有原因的。您可以实现自己的集合以支持批量操作并实现INotifyCollectionChanged。如果我将这样的控件绑定到ItemsControl会发生什么情况?有谁知道不支持批量更改的ItemsControls?我不认为有任何潜在的缺点或问题,只是它不存在。事实上,您会发现“System.Collections.Generic”中的大多数类型也不提供“AddRange”函数。同时,很多人已经创建了他们自己的“ObservableCollection”版本来提供您想要的功能。INotifyCollectionChanged包含足够的信息供其处理程序记录项目集合可能因此受到影响。最后但同样重要的是,如果您将集合与这些“范围”类型的操作绑定,您会发现它们将按预期与您的UI一起工作,或者允许您延迟更新并手动触发它们。例如,请参阅这个StackOverflow问题:ObservableCollection不支持AddRange方法,所以除了INotifyCollectionChanging之外,我还会收到添加的每个项目的通知吗?您还可以实现触发重置事件的批量加载,这将导致UI重新呈现集合中的所有项目:http://peteohanlon.wordpress.com/2008/10/22/bulk-loading-in-observablecollection/这些允许您更有效地管理UI更新。ItemsControl如何处理详细说明已更改项目列表的集合更改事件取决于WPF框架本身。我假设它会智能地处理这个问题!我的建议是,如果性能对您至关重要并且您的集合中有大量项目正在更新并遇到性能问题,那么子类化ObservableCollection以最适合您的应用程序需求的方式管理集合更改通知。NotifyCollectionChangedEventArgs包含索引信息。删除一个项目会导致索引重新排列,插入一个项目也是如此。因此,虽然并非完全不可能,但提供使用范围的能力将相当困难并且可能效率低下。Microsoft不提供它们一定是有原因的。他们不提供所有可能的功能,这(也是)成本与需求的问题。您可以实现自己的集合以支持批量操作并实现INotifyCollectionChanged。是的。执行此操作时,您会发现集合必须选择如何/何时传播这些更改。我从来没有尝试过,但我想这是有取舍的,与可重用的集合相比,View或ViewModel可以做出更好的决定。以上是C#学习教程:为什么ObservableCollection不支持批量变化?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
