2

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

基本上,该应用程序有几个选项卡表,每个选项卡表都有大约 50 个使用 DataBinding 到我的 ViewModel 的元素。一些绑定有点复杂,数据触发器和转换器根据绑定结果显示图像等等。

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

似乎针对不可见的视觉元素的绑定(因为它们位于与当前不同的选项卡表中)仍在处理、运行转换器和更新视觉控件。

有什么办法可以禁用它吗?实现我自己的 TabControl 将是一个选项,它禁用不可见选项卡的每个绑定,但还没有找到如何做到这一点。

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

附带说明一下,这可能很重要:每个绑定源每隔约 5 秒就会引发自己的 PropertyChanged,这是我们从视图模型中的设备读取值的时间。因此,每 5 秒左右,大约 300 个实现 INotifyPropertyChanged 的​​对象同时引发 PropertyChanged 事件,此时是应用程序冻结几秒钟的时间。

由于应用程序的性质,不能将更新速度减慢到 5 秒以上。

4

1 回答 1

1

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

在非 MVVM 中,我为每个属性做的是检测它是否是活动选项卡,如果不是活动选项卡,那么我让它什么都不返回或返回一个默认值。 TabControl有财产SelectedIndex

于 2012-11-10T14:12:57.747 回答