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重载,但我确实想要使用它,因为我想做的不仅仅是禁用按钮。
答案 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}”