DevExpress WPF使用技巧教程:TreeListView - 如何快速更新多個項目屬性
DevExpress廣泛應(yīng)用于ECM企業(yè)內(nèi)容管理、 成本管控、進(jìn)程監(jiān)督、生產(chǎn)調(diào)度,在企業(yè)/政務(wù)信息化管理中占據(jù)一席重要之地。通過DevExpress WPF Controls,您能創(chuàng)建有著強(qiáng)大互動功能的XAML基礎(chǔ)應(yīng)用程序,這些應(yīng)用程序?qū)W⒂诋?dāng)代客戶的需求和構(gòu)建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產(chǎn)品,還是以數(shù)據(jù)為中心的商業(yè)智能產(chǎn)品,都能通過該控件來實現(xiàn)。
本文主要為大家介紹在TreeListView中如何快速的更新多個項目的屬性。在接下來的系列文章中,小編將為大家介紹一些DevExpress WPF控件的使用技巧和提示,希望能幫助到大家!
問題:
在更新100 000樹列表項的屬性時,性能比較差。即使從treelist.ItemsSource屬性中刪除數(shù)據(jù)源,TreeList仍會處理PropertyChanged事件,并使性能較差。接下來,嘗試在性能分析器中檢查結(jié)果:
- BeginDataUpdate() / end - 沒有效果,但是DX PropertyChanged處理仍然是瓶頸;
- BeginInit() / end - 同樣的問題;
- ItemsSource = null - DXTree仍處理已刪除項目的PropertyChanged;
- 刪除tree branch - DXTree仍處理已移除項目的PropertyChanged;
- 停止提高PropertyChanged并最終重置ItemsSource - 獲得了100倍的性能提升,但是丟失視圖狀態(tài),這樣的解決方案非常粗糙。
解決方案:
TreeListView的內(nèi)部控制器由于BeginDataUpdate / EndDataUpdate方法調(diào)用而不會更新其排序和篩選,但仍可跟蹤屬性更改。要臨時凍結(jié)更新而不丟失TreeListView的狀態(tài),可以使用BindingList
//private ObservableCollection list = new ObservableCollection(); private BindingList list = new BindingList(); private void Update1() { tree.BeginDataUpdate(); list.RaiseListChangedEvents = false; foreach (var fakeItem in list) { fakeItem.Checked = true; } list.RaiseListChangedEvents = true; tree.EndDataUpdate(); }
DevExpress中文網(wǎng)官網(wǎng)QQ群:540330292 歡迎一起進(jìn)群討論
掃描關(guān)注DevExpress中文網(wǎng)微信公眾號,及時獲取最新動態(tài)及最新資訊
