C# Caliburn-已更改子ViewModel的属性
我在WPF应用程序中使用Caliburn和MVVM模式,并尝试使用尽可能多的约定。我遇到的一个问题是,我必须在导入的类上连接一些属性更改通知 假设我有这样一个ViewModel:C# Caliburn-已更改子ViewModel的属性,c#,wpf,mvvm,caliburn,C#,Wpf,Mvvm,Caliburn,我在WPF应用程序中使用Caliburn和MVVM模式,并尝试使用尽可能多的约定。我遇到的一个问题是,我必须在导入的类上连接一些属性更改通知 假设我有这样一个ViewModel: class ViewModelA { private readonly IViewModelB _b; public ViewModelA(IViewModelB b) { _b = b; } public bool CanGo { g
class ViewModelA
{
private readonly IViewModelB _b;
public ViewModelA(IViewModelB b)
{
_b = b;
}
public bool CanGo
{
get { return _b.MyBoolProperty; }
}
public void Go()
{
//Does something here
}
}
当MyBoolProperty的PropertyChanged事件从ViewModelB触发时,建议(正确)调用NotifyOfPropertyChange(()=>CanGo)的方法是什么
在过去,我使用PropertyObserver类型类来管理它
还是我设计的这个场景完全错了?如果您的“子”模型公开了公共属性,您可以使用DependenciesAttribute来跟踪更改:
class ViewModelA
{
public IViewModelB B {get; private set;}
public ViewModelA(IViewModelB b)
{
B = b;
}
public bool CanGo
{
get { return B.MyBoolProperty; }
}
[Dependencies("B.MyBoolProperty")]
public void Go()
{
//Does something here
}
}
要正常工作,整个属性路径应该由通知对象组成。
你也可以在最后加一个“*”
表明B的所有属性应引起前提条件重新评估;请注意,“*”仅作用于适当路径的末端,仅作用于一个深度级别(它不跟踪B的子模型上的更改)。我发现AutoCheckAvailabilityAttribute可以通过依赖CommandManager输入系统来实现这一点。然而,我认为这个选项调用我的CanGo方法的次数比我希望的要多。如何处理DependenciesAttribute?我似乎不知道如何让它工作,“.”语法是我所缺少的,我知道应该把它放在方法上,而不是CanX属性。我在任何地方都找不到使用这个的例子,谢谢。
[Dependencies("B.*")]