Вызов "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 при изменении соответствующих свойств.