Классические элементы пользовательского интерфейса в Windows Presentation Foundation. Шамшев Ан. Б. - 97 стр.

UptoLike

Составители: 

96
Однако на состояние команды могут влиять и другие факторы. В
данном примере флаг isDirty мог бы быть изменен в ответ на еще какое-
нибудь действие. Обнаружив, что состояние команды не обновляется в
нужное время, можно вынудить WPF вызвать метод CanExecute() на всех
используемых командах. Делается это вызовом статического метода
CommandManager. InvalidateRequerySuggested(). После этого диспетчер
команд запускает событие RequerySuggested, чтобы уведомить об этом все
существующие в окне источники команд нопки, элементы меню и т. д.),
которые затем повторно запрашивают информацию о состоянии связан-
ных с ними команд и обновляют себя соответствующим образом.
6.8. Ограничения команд WPF
Команды WPF способны изменять только один аспект состояния
связанного с ними элемента, а именно значение его свойства IsEnabled.
Однако могут возникнуть ситуации, когда требуется более сложная логи-
ка. Например, может возникнуть необходимость создать команду
PageLayoutView, которую можно было бы включать и отключать. При ее
включении соответствующие элементы управления должны настраиваться
соответствующим образом. Например, связанный элемент меню должен
отмечаться флажком, а связанная кнопка в панели инструментов выде-
ляться, как выделяется элемент CheckBox при его добавлении в элемент
ToolBar. К сожалению, возможности отслеживать состояние команды типа
«установлен флажок» не существует. Это означает, что обрабатывать со-
бытие для этого элемента управления и обновлять его состояние и состоя-
ние других связанных элементов необходимо вручную. Простого решения
для этой проблемы не существует. Даже если создать специальный класс,
унаследованный от RoutedUICommand, и обеспечить его функцией для от-
слеживания состояния «отмечен/не отмечен» и вызова в случае его изме-
нения соответствующего события, без замены части связанной
инфраструктуры все равно не обойтись. Например, в данном случае при-
шлось бы создать специальный класс CommandBinding, который бы мог
прослушивать уведомления от специальной команды, реагировать при из-