我有ObservableCollection<MyClass>
个实例,其中包含20个元素,并为控件设置为ItemsSource
。当我尝试为此集合调用Clear()
时,它变得干净,但在冻结应用程序4-5秒后。如果我不使用它像依赖属性的值它会快速清除。当我只运行(在Visual Studio中按Ctrl + F5)应用程序而不是调试时,它也不需要任何时间。
使用ObservableCollection
时从未遇到过如此缓慢的问题,并且不了解如何解决此问题(即使,但未显示分析延迟)。我使用ItemsSource属性开发控件,因此我无法取消分配属性值 - 清除集合 - 再次设置属性值。我的自定义控件的处理程序工作得很快。并且应用程序在Clear()调用之后和我的自定义INotifyCollectionChanged.CollectionChanged
事件处理程序之前冻结。
答案 0 :(得分:0)
好吧,在制作自己的数据网格时,我建议每个人检查标准的wpf控件以及他们如何使用enumarables进行管理。
在为我的自定义网格创建单元格的项目中,我做了一些这样的操作,将集合元素设置为单元格的DataContext
:
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];