使用变量禁用和启用按钮

时间:2017-06-16 18:00:37

标签: c# wpf mvvm

我有一个使用bool启用或禁用的按钮,我正在使用MVVM:

按钮:

<Button x:Name="backButton" Content="Back" Command="{Binding BackCommand}" 
IsEnabled="{Binding Path=BackBool, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>

布尔:

    public bool BackBool
    {
        get { return isBackEnabled; }
        set
        {
            this.RaisePropertyChangedEvent("isBackEnabled");
            isBackEnabled = value;
            this.RaisePropertyChangedEvent("isBackEnabled");
        }
    }

我已将bool添加到变量监视器中,并且当应启用按钮时,它会正确更新并更改为true。

然而,他们自己的按钮不会更新并始终保持禁用状态。

我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

使用其值已更改的属性的名称提升PropertyChanged。您在XAML中给Binding提供了一条适用的信息:字符串&#34; BackBool&#34;。

public bool BackBool
{
    get { return isBackEnabled; }
    set
    {
        isBackEnabled = value;
        this.RaisePropertyChangedEvent("BackBool");
    }
}

此外,省略绑定中的no-op标志。永远不要在绑定上设置属性,直到您在MSDN上查找它并找出它的作用。在Stack Overflow上节省了大量的责任,并且你自己的很多时间都在测试那些无法改变的变化。

<Button 
    x:Name="backButton" 
    Content="Back" 
    Command="{Binding BackCommand}" 
    IsEnabled="{Binding Path=BackBool}"
    />

答案 1 :(得分:1)

修改后的代码版本

按钮:

<Button x:Name="backButton" Content="Back" Command="{Binding BackCommand}" 
IsEnabled="{Binding Path=BackBool, Mode=OneWay}"/>

布尔:

public bool BackBool
{
    get { return isBackEnabled; }
    set
    {
        isBackEnabled = value;
        this.RaisePropertyChangedEvent("BackBool");
    }
}