我正在开发一个严重依赖DataBinding的WPF应用程序。
基本上,应用程序有几个标签页,每个标签页都有~50个元素,使用DataBinding连接到我的ViewModel。一些绑定有点复杂,数据触发器和转换器根据绑定结果等显示图像。
当我启动应用程序时,性能很好,但是当我浏览每个选项卡时,它变得越来越慢(并且CPU使用率增加)。在导航之后,比方说,10个选项卡,应用程序几乎不可用,每次绑定源触发de PropertyChanged事件时挂起几秒钟。
看起来好像是针对不可见的可视元素的绑定(因为它们位于与当前元素不同的标签页中)仍在处理,运行转换器和更新可视控件。
有没有办法禁用它?可以选择实现我自己的TabControl,禁用非可见选项卡的每个绑定,但还没有找到如何执行此操作。
任何其他建议将不胜感激!
作为旁注,这可能很重要:每个绑定源每隔~5s引发一次自己的PropertyChanged,这是我们从viewmodel中的设备读取值的时间。因此,大约300个实现INotifyPropertyChanged的对象每隔5s左右同时引发PropertyChanged事件,此时应用程序冻结几秒钟。
由于应用程序的性质,不能选择将更新速度降低到超过5秒。
答案 0 :(得分:1)
我不是MVVM,但我认为在MVVM中只呈现了活动选项卡。
在非MVVM中,我所做的是每个属性,我检测它是否是活动选项卡,如果不是活动选项卡,那么我让它返回任何内容或默认值。 TabControl
具有SelectedIndex
属性。