我正在尝试使Caliburn Micro进入我的项目,并且在不绑定到视图的属性的上下文中无法理解保护方法(Can*
)(请谅解。术语错误)。
我改编了Tim Corey's example以添加此代码段:
private bool _connected;
public bool Connected
{
get { return _connected; }
set { _connected = value; NotifyOfPropertyChange(() => Connected); }
}
public bool CanSayHello(bool connected)
{
return connected;
}
public void SayHello(bool connected)
{
Console.WriteLine("Hello!");
}
public bool CanClearText(string firstName, string lastName)
{
if (String.IsNullOrWhiteSpace(firstName) && string.IsNullOrWhiteSpace(lastName))
{
Connected = false;
return false;
}
else
{
Connected = true;
return true;
}
}
关联的xaml是:
<!-- Row 4 -->
<Button x:Name="ClearText" Grid.Row="4" Grid.Column="1">Clear Names</Button>
<Button x:Name="SayHello" Grid.Row="4" Grid.Column="2">Say Hello</Button>
SayHello
按钮从不启用(即使看起来它应该与CanClearText
处于相同的状态)。目的是将Connected
用作中介属性;在我整理的应用程序中,想法是Connected
实际上是由外部消息(来自模型-未连接到视图)设置的。
This question有点了解,但我想避免显式调用NotifyOfPropertyChange(() => CanSayHello);
,而是让Caliburn Micro框架为我完成工作。我对此很陌生,我敢肯定我缺少一些简单的东西-感谢您的帮助。
Caliburn Micro,在这种情况下,可能无法提供简单的解决方案。每次“连接属性”更改时,您都必须为诸如CanSayHello之类的依赖属性手动触发NotifyPropertyChanged。但是,您可以使用Fody扩展名,而无需明确输入代码即可为您做同样的事情。
例如,
[AlsoNotify(nameof(CanSayHello))]
public bool Connected
{
get { return _connected; }
set { _connected = value; NotifyOfPropertyChange(() => Connected); }
}
这将在代码编织的帮助下完成NotifyPropertyChanged,而无需您自己明确地这样做。