在WPF中快速显示大型排序列表?

blu*_*bit 2 sorting wpf performance large-data-volumes

我正在开发一个程序,它应该能够显示多个(最多500个项目)数据列表,这些数据需要在内容更改时使用.

本质上,我有一个带有可观察集合的viewmodel,它包含绑定到gui的可观察数据的类,它们显示在ListView中.

必须对数据进行排序,但数据也可能随时更改,每次都需要使用列表.

在没有锁定GUI的情况下显示和保持整个事物的最佳机制/隐喻是什么?我有一个使用NotifyCollectionChangedEventArgs和一些排序函数的解决方案,但它的SLOW - 我假设每次更改数据元素时它都会重新调整并重建整个GUI.

Nic*_*ong 8

看看CollectionView/CollectionViewSource类.这些类位于ObservableCollection和WPF的数据绑定逻辑之间,以执行排序,过滤等操作.

我怀疑从NotifyCollectionChanged编写自己的排序功能是性能问题的根源; 这取决于你的精确实现,但是当你对列表进行排序时,可能会引发一系列的CollectionChanged事件,这导致WPF在你的排序例程的每次迭代中重新绑定集合......这将非常慢,因为你描述.

CollectionView和CollectionViewSource不会影响源集合,只会影响UI上显示的集合视图,因此您应该看到现在正在执行的操作的显着加速.当微软的DataGrid控件发布时,他们已经演示了它显示和排序数百万行 - 而且它正在精确地使用这些类来执行它的排序.你真的不应该看到500行的性能问题.

最后,CollectionView和CollectionViewSource之间的区别在于它们的设计用途; 当您从XAML执行C#,CollectionViewSource时,使用CollectionView.您可能还想查看本文以快速了解这些类.