2

RelayCommands 覆盖了我的按钮的“IsEnabled”。

这是一个错误吗?这是我的视图中的 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 重载,但我确实想使用它,因为我想做的不仅仅是拥有一个禁用的按钮。

4

2 回答 2

3

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

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

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

干杯,劳伦特

于 2010-04-30T12:10:39.580 回答
1

这是我的实现...

1) RelayCommand 类声明可以是:

公共类 RelayCommand:ViewModelBase,ICommand

2) IsEnabled 属性的实现如下:

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

                OnPropertyChanged("IsEnabled");
            }
        }
    }

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

IsEnabled="{绑定路径=SearchCommand.IsEnabled}"

于 2011-05-01T19:44:12.050 回答