WPF Notify无法处理多个视图模型

本文关键字:视图 模型 处理 Notify WPF | 更新日期: 2023-09-27 17:59:42

所以基本上我有三个视图模型。一种是ShellViewModel,其中实时存储和计算所有数据。另外两个视图模型以不同的方式显示计算。这两个虚拟机显示为shell视图中的视图(通过calburn容器和与ContentControl绑定的ActiveItem)。为了将数据发送到其他虚拟机,我通过在第二个虚拟机的构造函数中发送它们,将它们的属性绑定到shell虚拟机的属性。

VM = new ViewModelA(_PropertyOfShellVM);
//---
ViewModelA(PropertyOfShellVM p)
{
    VMProp = p;
}

属性是来自dll的类,没有Notify函数。作为引用类型,虚拟机中的类是相同的。在其他虚拟机中,我绑定到这些类属性。

class PropertyOfShellVM
{
     bool PropertyA{get;set;}
     int PropertyB{get;set;}
}
<CheckBox Content="PropA" IsChecked="{Binding VMProp.PropertyA}"/>
<Slider Value="{Binding VMProp.PropB}"/>

问题是这些类经常更改,并且需要不断更新。但是当使用Caliburn的NotifyOfPropertyChange(()=>VMProp)时,UI不会更新。我尝试在属性getter中编写Notify,但没有效果。我还尝试重新绑定自定义事件的VM属性,我通过Caliburn的事件管理器在新结果中发送了这些属性,但速度太慢了(我每秒更改多次这些值,但事件大约每3秒更新一次UI)。如何修复Notify?

WPF Notify无法处理多个视图模型

您可能希望使用Caliburn.Micro's事件聚合器将更改从一个视图模型传递到另一个视图。不过,我不确定它是如何影响性能的。

通过使用VM Refresh()方法修复了该问题,该方法强制在UI上刷新VM的所有属性。就良好的实践而言,这是一个相当粗略的决定,但它足够快,而且有效。现在还不会将其标记为答案,因为可能有更好的解决方案。