Я только что реализовал вызов Execute для команды, не вызвав сначала CanExecute.
От отладки я бы сказал, что CanExecute вызывается, хотя; однако, я не уверен, что это совпадение.
Я хотел бы знать, могу ли я полагаться на то, что CanExecute неявно называется всякий раз, когда я поднимаю Execute вручную, или если я должен сам вызвать CanExecute?
Вы не можете полагаться на это. CanExecute()
вызывается, когда Command
привязана к элементу интерфейса командной CommandManager
например Button (через CommandManager
), но проверяет CanExecute()
в самой Execute()
, будет деталью реализации для конкретной реализации ICommand
и не подразумевается,
Тем не менее, это интересная идея, а не плохой, учитывая, как часто мне приходилось делать следующее в моем собственном коде:
if (SomeCommand.CanExecute(null))
SomeCommand.Execute(null);
Нет, это не останавливает выполнение команды, если вы просто вызываете метод Execute. Если вы хотите сделать это, вы должны использовать:
if(myCommand.CanExecute())
{
myCommand.Execute();
}
Или, если вы используете эту команду из привязки, вы должны поднять myCommand.RaiseCanExecuteChanged при изменении соответствующих свойств.