Обычно вы должны использовать метод CanExecute
команды, чтобы отключить Button
. Большинство реализаций интерфейса ICommand
принимает Predicate<object>
, который можно использовать, чтобы указать команде, когда включать команду / кнопку.
В этом случае вы можете просто удалить обработчик событий из выделенного кода и просто обработать команду в модели представления:
<Button Content="{Binding DataText}" Height="30" Width="80" Command="{Binding Enable}" IsEnabled="{Binding IsEnable}" />
Это должно работать, так как вы устанавливаете свойство IsEnable
в методе Execute
команды и инициируете событие PropertyChanged
. Как правило, вы не обрабатываете события Click
в выделенном фрагменте представления при привязке к команде модели представления.
Если вы используете метод CanExecute
команды, вам не нужно связываться со свойством IsEnable
:
<Button Content="{Binding DataText}" Height="30" Width="80" Command="{Binding Enable}" />
Просмотр модели:
private RelayCommand _enableCmd;
public RelayCommand Enable => _enableCmd ?? (_enableCmd = new RelayCommand(doEnable, x => _isEnabled));
private bool _isEnabled;
public string DataText { get; set; }
protected void doEnable(object obj)
{
_isEnabled = true;
Enable.RaiseCanExecuteChanged();
DataText = "Clicked";
OnPropertyChange(nameof(DataText));
}