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