【问题标题】:Caliburn Micro actionsCaliburn Micro 动作
【发布时间】:2018-04-12 20:11:14
【问题描述】:

我对一件事感到困惑。当我从称为ClearTextCanClearText 的方法(或其中之一)中删除参数(string firstName) 时,清除数据时按钮不会被禁用。

你能解释一下发生了什么吗?

这是财产;

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 = "";
}

这是对应的文本框和按钮

<TextBox x:Name ="FirstName" MinWidth="100" Grid.Column="1" Grid.Row="2"></TextBox>
<Button Grid.Row="4" Grid.Column="1" x:Name="ClearText"> Clear Names </Button>

【问题讨论】:

  • 我不知道为什么会这样,我使用 Caliburn.Micro 并使用 CanXXX 没有任何参数没有任何问题。似乎您希望在您的CanClearText 中输入代码:return !string.IsNullOrEmpty(FirstName);,因为您希望能够清除空格/空格。
  • 我在youtube上看了这个视频youtube.com/watch?v=laPFq3Fhs8k(时间:1:05:57),作者也在这些方法中使用了参数..这很有趣..

标签: c# wpf mvvm caliburn.micro


【解决方案1】:

从技术上讲,您没有使用传递给动作和守卫的参数,因此实际上不需要它。

您也可以将属性用作动作守卫

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 不知道关于动作的守卫的任何更改。使用属性方法并通知 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,它将隐藏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2012-10-24
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2013-01-10
    相关资源
    最近更新 更多