MVVM按钮禁用

时间:2013-01-09 12:57:05

标签: silverlight

我正在使用SIlverLight RelayCommand来启用和禁用按钮。 基于某些条件,我想禁用一个按钮, 请建议我如何禁用按钮

以下工作正常,初始加载

 public RelayCommand BackClickCommand
    {
        get
        {
            if (_backClickCommand == null)
            {
                _backClickCommand = new RelayCommand(() =>
                {
                    step--;
                    if(step<1)
                   // code need to diable this button
                }, () => this.CanExecute());
            }

            return _backClickCommand;

        }
    }
    int step=2;

    public bool CanExecute()
    {
        if(step>0)
        return enabled;
        else false;
    }

我的代码中的某些地方

    enabled = false;

请建议我如何禁用我的按钮

谢谢,

2 个答案:

答案 0 :(得分:2)

假设你像这样绑定你的Xaml:

<Button Command="{Binding BackClickCommand}" />

您需要做的就是提醒用户界面再次检查绑定:

enabled = false;
PropertyChanged(this, new PropertyChangedEventArgs("BackClickCommand"));

这将使UI再次检查BackClickCommand并看到它已更改,从而禁用该按钮。

有关完整的代码示例,请参阅MSDN

编辑:这可能是一段代码:

int step = 2;

public RelayCommand BackClickCommand
{
    get
    {
        if (_backClickCommand == null)
        {
            _backClickCommand = new RelayCommand(() =>
            {
                step--;
                PropertyChanged(this, new PropertyChangedEventArgs("BackClickCommand")); 
            }, () => this.CanExecute());
        }

        return _backClickCommand;

    }
}

public bool CanExecute()
{
    return this.step > 0;
}

答案 1 :(得分:0)

每当步长值发生变化时,您必须通知命令已更改,以便再次评估CanExecute。

正如你所说,启用将在代码中的某处进行评估。

您的代码可能更不相同:

int step=2;

public RelayCommand BackClickCommand
{
    get
    {
        if (_backClickCommand == null)
        {
            _backClickCommand = new RelayCommand(() =>
            {
                step--; // Your logic
                OnPropertyChanged("BackClickCommand"); // Notify the change!
            }, () => this.CanExecute());
        }

        return _backClickCommand;
    }
}

public bool CanExecute()
{
    return enabled;
}