WPF通知不使用多个视图模型

时间:2016-08-01 10:06:28

标签: c# wpf mvvm data-binding caliburn

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

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

属性是来自没有Notify函数的dll的类。作为引用类型,VM中的类是相同的。在其他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(()=&gt; VMProp)时,UI不会更新。我尝试在属性getter中编写Notify但没有效果。我还试图在自定义事件上重新绑定VM属性,我通过Caliburn的事件管理器发送了新的结果,但它太慢了(我的这些值每秒更改多次,但事件每3次只更新一次UI秒)。如何修复通知?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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