问题:
在更新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·1024程序员节火热开启!致敬改变世界的程序猿!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!