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];
我有 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];