Вызывает ли «command.Execute» неявный вызов CanExecute первым?

1

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

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

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

  • 1
    по умолчанию ответственность за выполнение команды может выполнять исполнитель команды.
Теги:
wpf
routed-commands

2 ответа

2

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню