文檔金喜正規買球>>DevExpress WPF使用技巧教程>>DevExpress WPF使用技巧教程:TreeListView - 如何快速更新多個項目屬性
DevExpress WPF使用技巧教程:TreeListView - 如何快速更新多個項目屬性
DevExpress廣泛應用于ECM企業內容管理、 成本管控、進程監督、生產調度,在企業/政務信息化管理中占據一席重要之地。通過DevExpress WPF Controls,您能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產品,還是以數據為中心的商業智能產品,都能通過該控件來實現。
本文主要為大家介紹在TreeListView中如何快速的更新多個項目的屬性。在接下來的系列文章中,小編將為大家介紹一些DevExpress WPF控件的使用技巧和提示,希望能幫助到大家!
問題:
在更新100 000樹列表項的屬性時,性能比較差。即使從treelist.ItemsSource屬性中刪除數據源,TreeList仍會處理PropertyChanged事件,并使性能較差。接下來,嘗試在性能分析器中檢查結果:
- BeginDataUpdate() / end - 沒有效果,但是DX PropertyChanged處理仍然是瓶頸;
- BeginInit() / end - 同樣的問題;
- ItemsSource = null - DXTree仍處理已刪除項目的PropertyChanged;
- 刪除tree branch - DXTree仍處理已移除項目的PropertyChanged;
- 停止提高PropertyChanged并最終重置ItemsSource - 獲得了100倍的性能提升,但是丟失視圖狀態,這樣的解決方案非常粗糙。
解決方案:
TreeListView的內部控制器由于BeginDataUpdate / EndDataUpdate方法調用而不會更新其排序和篩選,但仍可跟蹤屬性更改。要臨時凍結更新而不丟失TreeListView的狀態,可以使用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中文網官網QQ群:540330292 歡迎一起進群討論
掃描關注DevExpress中文網微信公眾號,及時獲取最新動態及最新資訊
