我对一件事感到困惑。当我从名为expect(fetchSpy.args).toBe(...)
和(string firstName)
的方法(或其中一个)中删除参数ClearText
时,在清除数据时该按钮不会被禁用。
你能解释一下会发生什么吗?
这是财产;
CanClearText
这些是方法:
public string FirstName
{
get
{
return _firstName;
}
set
{
_firstName = value;
NotifyOfPropertyChange(() => FirstName);
}
}
这是相应的文本框和按钮
public bool CanClearText(string firstName)
{
return !string.IsNullOrWhiteSpace(FirstName);
}
public void ClearText(string firstName)
{
FirstName = "";
}
答案 0 :(得分:2)
从技术上讲,你没有使用传递给动作和守卫的参数,因此根本不需要它。
你也可以使用属性作为行动警卫
public string FirstName {
get {
return _firstName;
}
set {
_firstName = value;
NotifyOfPropertyChange(() => FirstName);
NotifyOfPropertyChange(() => CanClearText);
}
}
public bool CanClearText {
get {
return !string.IsNullOrEmpty(FirstName);
}
}
public void ClearText() {
FirstName = "";
}
以前发生的事情是,用户界面并未发现有关该动作后卫的任何变化。使用属性方法并通知UI它应该重新检查警卫将更新按钮的可用性。
通过使用属性方法,您还可以利用绑定到动作防护。例如
如果没有理由清除文本,因为它是空的,那么你也可以隐藏按钮。
<TextBox x:Name ="FirstName" MinWidth="100" Grid.Column="1" Grid.Row="2"></TextBox>
<Border x:Name="CanClearText" Grid.Row="4" Grid.Column="1">
<Button x:Name="ClearText" Content="Clear Names" />
</Border>
通过Caliburn.Micro自动将CanClearText
边框的可见性绑定到属性,只要CanClearText
属性为 false ,它就会隐藏。