2014-08-27 2 views
1

Я только что реализовал вызов Execute для команды без вызова CanExecute.Вызывает ли вызов «command.Execute» неявно сначала вызов CanExecute?

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

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

+1

по умолчанию исполнитель команды несет ответственность за проверку идентификатора команды. – pushpraj

ответ

2

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

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

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

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

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

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

Смежные вопросы