DevExpress WPF使用技巧教程:TreeListView – 如何快速更新多个项目属性

问题:

在更新100 000树列表项的属性时,性能比较差。即使从treelist.ItemsSource属性中删除数据源,TreeList仍会处理PropertyChanged事件,并使性能较差。接下来,尝试在性能分析器中检查结果:

  1. BeginDataUpdate() / end – 没有效果,但是DX PropertyChanged处理仍然是瓶颈;
  2. BeginInit() / end – 同样的问题;
  3. ItemsSource = null – DXTree仍处理已删除项目的PropertyChanged;
  4. 删除tree branch  – DXTree仍处理已移除项目的PropertyChanged;
  5. 停止提高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进行处理,非常感谢!

上一篇 2019年9月18日
下一篇 2019年9月18日

相关推荐

发表回复

登录后才能评论