Как WPF определяет, когда нужно сделать недействительным использование CommandManager (CommandManager.InvalidateRequerySuggested)? - PullRequest
2 голосов
/ 05 октября 2011

Я использовал RelayCommand немного здесь и там, и это заставило меня задуматься и захотеть узнать ... когда именно вызывается CommandManager.InvalidateRequerySuggested() по WPF?

Полагаю, каждый раз, когда запускается любое другое перенаправленное событие в пользовательском интерфейсе, которое в мире MVVM в первую очередь означает, что возникает событие OnPropertyChanged, что приводит к изменению значения, что приводит к выполнению некоторого связанного события routedevent. Но это всего лишь предположение, мне интересно, кто-нибудь знает точную внутреннюю работу здесь.

1 Ответ

2 голосов
/ 05 октября 2011

Есть несколько причин, о которых я знаю:

  • При изменении фокуса клавиатуры.

  • После выполнения команды.

  • Элементы управления могут вызывать это, когда они считают это необходимым в некоторых других случаях (например, когда вы нажимаете клавишу в TextBox).

Изменение свойства само по себе, как правило, не является причиной для аннулирования (я думаю, из соображений производительности).

К сожалению, мне не удалось найти какую-либо документацию по этому поводу в MSDN. То, что я опубликовал здесь, основано на том, что я нашел в Pro WPF в C # 2010 (отличная книга BTW).

Кроме того, не CommandManager становится недействительным. CommandManager просто отправляет событие (на которое подписываются элементы управления, использующие команды), чтобы они могли обновить свое состояние «включено / отключено».

...