Принудительный вызов CanExecute() на кнопках с командой (WPF)

При использовании команд в WPF бывает такое, что элемент (кнопка) остается неактивной не смотря на то, что e.CanExecute=true  до тех пор, пока не получит фокус.

Подробнее проблема описана здесь.

А описание простого решения на русском здесь:

Если обнаруживается, что состояние команды не обновляется в нужный момент, WPF можно принудить вызывать метод CanExecute() на всех используемых командах. Это делается вызовом статического метода CommandManager.InvalidateRequerySuggested(). После этого диспетчер команд будет генерировать событие RequerySuggested для уведомления всех присутствующих в окне источников команд (кнопок, элементов меню и т.д.). Эти источники команд затем повторно опросят связанные с ними команды и соответствующим образом обновят свое состояние.

Короче, можно принудительно вызвать CanExecute() у всех элементов, даже у тех, что не в фокусе:

CommandManager.InvalidateRequerySuggested();

 

Также, здесь описаны другие варианты решения проблемы (у меня не подтвердились):

* у контейнера, в котором находится элемент с командой, устанавливать

FocusManager.IsFocusScope="True" 

* использовать TooBar или Menu, у которых это свойство установлено по-умолчанию

* указывать целевой элемент, от которого зависит состояние исходного (кнопки) элемента:  CommandTarget="{Binding ElementName=_dest}" 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *