2010-01-15 21 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以便快速瞭解這些類。