很多绑定,真的很慢,即使附加的UIElement不可见,也是绑定活动的?

时间:2012-11-10 13:31:05

标签: wpf performance data-binding uielement

我正在开发一个严重依赖DataBinding的WPF应用程序。

基本上,应用程序有几个标签页,每个标签页都有~50个元素,使用DataBinding连接到我的ViewModel。一些绑定有点复杂,数据触发器和转换器根据绑定结果等显示图像。

当我启动应用程序时,性能很好,但是当我浏览每个选项卡时,它变得越来越慢(并且CPU使用率增加)。在导航之后,比方说,10个选项卡,应用程序几乎不可用,每次绑定源触发de PropertyChanged事件时挂起几秒钟。

看起来好像是针对不可见的可视元素的绑定(因为它们位于与当前元素不同的标签页中)仍在处理,运行转换器和更新可视控件。

有没有办法禁用它?可以选择实现我自己的TabControl,禁用非可见选项卡的每个绑定,但还没有找到如何执行此操作。

任何其他建议将不胜感激!

作为旁注,这可能很重要:每个绑定源每隔~5s引发一次自己的PropertyChanged,这是我们从viewmodel中的设备读取值的时间。因此,大约300个实现INotifyPropertyChanged的对象每隔5s左右同时引发PropertyChanged事件,此时应用程序冻结几秒钟。

由于应用程序的性质,不能选择将更新速度降低到超过5秒。

1 个答案:

答案 0 :(得分:1)

我不是MVVM,但我认为在MVVM中只呈现了活动选项卡。

在非MVVM中,我所做的是每个属性,我检测它是否是活动选项卡,如果不是活动选项卡,那么我让它返回任何内容或默认值。 TabControl具有SelectedIndex属性。