Caliburn Micro行动

时间:2018-04-12 20:11:14

标签: c# wpf mvvm caliburn.micro

我对一件事感到困惑。当我从名为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 = "";
}

1 个答案:

答案 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 ,它就会隐藏。