我正在开发一个严重依赖 DataBinding 的 WPF 应用程序。
基本上,该应用程序有几个选项卡表,每个选项卡表都有大约 50 个使用 DataBinding 到我的 ViewModel 的元素。一些绑定有点复杂,数据触发器和转换器根据绑定结果显示图像等等。
启动应用程序时性能很好,但是当我浏览每个选项卡时,它变得越来越慢(并且 CPU 使用率增加)。在我浏览了 10 个选项卡之后,应用程序几乎无法使用,每次绑定源触发 de PropertyChanged 事件时都会挂起几秒钟。
似乎针对不可见的视觉元素的绑定(因为它们位于与当前不同的选项卡表中)仍在处理、运行转换器和更新视觉控件。
有什么办法可以禁用它吗?实现我自己的 TabControl 将是一个选项,它禁用不可见选项卡的每个绑定,但还没有找到如何做到这一点。
任何其他建议将不胜感激!
附带说明一下,这可能很重要:每个绑定源每隔约 5 秒就会引发自己的 PropertyChanged,这是我们从视图模型中的设备读取值的时间。因此,每 5 秒左右,大约 300 个实现 INotifyPropertyChanged 的对象同时引发 PropertyChanged 事件,此时是应用程序冻结几秒钟的时间。
由于应用程序的性质,不能将更新速度减慢到 5 秒以上。