ObservableCollection 清除很慢

ObservableCollection clears very slow

我有 ObservableCollection<MyClass> 个实例,其中包含 20 个元素,并将其设置为 ItemsSource 作为控件。当我尝试为此集合调用 Clear() 时,它变得干净,但在冻结应用程序 4-5 秒后。如果我 不像依赖值 属性 那样使用它,它会很快清除。当我 只是 运行(Visual Studio 中的 Ctrl+F5) 应用程序而不是调试时,它也不需要任何时间。

在使用 ObservableCollection 时从未遇到过如此缓慢的情况,并且不明白如何解决这个问题(即使 分析时 延迟未显示)。我使用 ItemsSource 属性 开发控件,所以我无法取消分配 属性 值 - 清除集合 - 再次设置 属性 值。我的自定义控件的处理程序运行速度很快。应用程序在 Clear() 调用之后和我的自定义 INotifyCollectionChanged.CollectionChanged 事件处理程序调用之前冻结。

好吧,在制作您自己的数据网格时,我建议每个人检查标准的 wpf 控件以及它们如何使用可枚举项进行管理。 在我的项目中,为我的自定义网格创建单元格时,我做了一些类似的操作,将集合元素设置为 DataContext for cell:

cellContainer.SetBinding(Grid.DataContextProperty, new Binding
{
    Path = new PropertyPath(string.Format("ItemsSource[{0}]", rowIndex)),
    ElementName = "myUserControl"
});

它是无用的绑定,这使得 WPF 要跟踪每个单元格的集合变化并且花费很多时间。最好简单地将项目值分配给单元格容器的 DataContext,例如:

cellContainer.DataContext = myUserControlInstance.ItemsSource
    /*.OfType<object>.Skip(rowIndex).FirstOrDefault() or for ILists:*/[rowIndex];