2010-01-15 60 views
2

我正在开发一个程序,该程序应该能够显示长的(最多500个项目)数据列表,当它们的内容更改时需要使用这些数据。在WPF快速显示大的排序列表?

从本质上讲,我有与包含与结合到图形用户界面,其中显示在ListView观察到的数据类可观察到的集合的视图模型。

的数据必须进行排序,但数据也可以随时更改,并且需要每次都使出列表。

什么是最好的机制/比喻显示,并保持不锁定了GUI使出了整个事情?我有一个使用NotifyCollectionChangedEventArgs和一些排序函数的解决方案,但是它的SLOW - 我假设每次数据元素发生更改时都要重建整个GUI。

回答

8

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

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

的CollectionView和CollectionViewSource不影响源集合,显示在UI上收集的只是视图,所以你应该看到过你现在正在做什么显著加速。当微软的DataGrid控件发布后,他们已经展示并分类了数百万行 - 而且它正是使用这些类来完成它的排序。你真的不应该看到500行的性能问题。

最后,的CollectionView和CollectionViewSource之间的差是在那里它们被设计为可使用;当您在C#中使用CollectionView时,CollectionViewView会在您从XAML执行时使用CollectionViewSource。您可能还想看看this article以便快速了解这些类。