0

我正在使用 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;

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

谢谢,

4

2 回答 2

2

假设您要像这样绑定 Xaml:

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

您需要做的就是提醒 UI 再次检查绑定:

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

这将使 UIBackClickCommand再次检查并查看它是否已更改,从而禁用该按钮。

有关完整代码示例,请参阅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;
}
于 2013-01-09T13:00:18.957 回答
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;
}
于 2013-01-09T13:24:50.780 回答