【发布时间】:2015-07-10 11:08:26
【问题描述】:
我有 ObservableCollection<MyClass> 实例,其中包含 20 个元素,并将其设置为 ItemsSource 用于控件。当我尝试为此集合调用 Clear() 时,它变得干净,但在冻结应用程序 4-5 秒后。如果我不将它用作依赖属性的值,它会很快清除。当我简单地运行(Visual Studio 中的 Ctrl+F5) 应用程序而不是调试时,它也不需要任何时间。
在使用 ObservableCollection 时从未遇到过如此缓慢的情况,并且不知道如何解决此问题(甚至 在分析时 延迟未显示)。我使用 ItemsSource 属性开发控件,因此我无法取消分配属性值 - 清除集合 - 再次设置属性值。我的自定义控件的处理程序工作得很快。并且应用程序在 Clear() 调用之后和我的自定义 INotifyCollectionChanged.CollectionChanged 事件处理程序调用之前冻结。
【问题讨论】:
-
如果将 ItemsSource 设置为空的 ObservableCollection
而不是 Clear,会发生什么?如果它更快,那么它可能是您的 CollectionChanged 处理程序,如果不是,那么可能是因为您的 MyClass VM 层的 View 层非常重。您最好的办法是给我们一些简单的工作示例,以便我们进行测试 -
@nkoniishvt,通过从标准控件中窃取的优化修复了这个问题,这些控件与 ObservableCollection 一起工作得很快,现在它工作得很快。查看答案。
标签: c# wpf observablecollection