RelayCommands覆盖我的按钮的“IsEnabled”

时间:2010-04-28 03:23:35

标签: mvvm-light

RelayCommands覆盖我按钮的“IsEnabled”。

这是一个错误吗?这是我的View中的xaml和来自ViewModel的代码

<Button Grid.Column="0" Content="Clear" IsEnabled="False" cmd:ButtonBaseExtensions.Command="{Binding ClearCommand}"  />    

public RelayCommand ClearCommand
    {
       get { return new RelayCommand(() => MessageBox.Show("Clear Command")); }
    }

注意我在我的xaml中硬编码了IsEnabled =“False”。该值完全被忽略(按钮始终启用)。

我意识到RelayCommand有一个CanExecute重载,但我确实想要使用它,因为我想做的不仅仅是禁用按钮。

2 个答案:

答案 0 :(得分:3)

这是一个有趣的观点。你是对的,IsEnabled属性被覆盖。我想如果在构造函数中没有设置CanExecute委托,则可以忽略IsEnabled属性...我将在下一个版本中考虑它。

同时,使用CanExecute委托并将其设置为始终返回false。

public RelayCommand ClearCommand
{
   get { return new RelayCommand(
       () => MessageBox.Show("Clear Command"),
       () => false); }
}

干杯, 劳伦

答案 1 :(得分:1)

这是我的实施......

1)RelayCommand类声明可以是:

public class RelayCommand:ViewModelBase,ICommand

2)IsEnabled属性的实现可以如下:

    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            if (value != _isEnabled)
            {
                _isEnabled = value;

                OnPropertyChanged("IsEnabled");
            }
        }
    }

3)最后,您需要在xaml中绑定IsEnabled属性,如下所示:

IsEnabled =“{Binding Path = SearchCommand.IsEnabled}”