WPF 通知不适用于多个视图模型

WPF Notify not working with multiple viewmodels

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

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

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

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 没有 update.I 尝试在属性 getter 中写入 Notify 但没有效果。我还尝试在自定义事件上重新绑定 VM 属性,这是我通过 Caliburn 的事件管理器发送的新结果,但速度太慢(我让这些值每秒更改多次,但事件仅更新 UI大约每 3 秒一次)。如何修复通知?

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

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