Вызов "command.Execute" неявно вызывает CanExecute первым?

Я только что реализовал вызов Execute для команды без предварительного вызова CanExecute.

Из отладки я бы сказал, что CanExecute вызывается хотя; Однако я не уверен, что это совпадение.

Я хотел бы знать, могу ли я полагаться на тот факт, что CanExecute неявно вызывается всякий раз, когда я поднимаю Execute вручную, или я должен сам вызывать CanExecute?

2 ответа

Вы не можете полагаться на это. CanExecute() называется, когда Command привязан к элементу пользовательского интерфейса с поддержкой команд, как кнопка (через CommandManager) но проверяю CanExecute() в Execute() сама по себе будет деталь реализации для конкретной реализации ICommand и не подразумевается.

Однако, это интересная и неплохая идея, учитывая, как часто мне приходилось делать следующее в своем собственном коде:

if (SomeCommand.CanExecute(null))
    SomeCommand.Execute(null);

Нет, это не останавливает выполнение команды, если вы просто вызываете метод Execute. Если вы хотите сделать это, вы должны использовать:

if(myCommand.CanExecute())
{
    myCommand.Execute(); 
}

Или, если вы используете эту команду из привязки, вы должны вызвать myCommand.RaiseCanExecuteChanged при изменении соответствующих свойств.

Другие вопросы по тегам