Кога WPF пита повторно командите дали могат да се изпълняват? Дебъгерът съобщава, че това се случва доста често. Но какъв е точният набор от условия?
Кога WPF решава да поиска отново команди дали могат да се изпълнят?
Отговори (1)
Версията му за TL; DR е, че методите CanExecute се извикват, когато се появят определени входни събития в прозореца. Има предимно събития с клавиатура и мишка.
Така че всеки път, когато някой щракне или натисне клавиш, ВСИЧКИ команди се анулират от CommandManager (чрез повдигане на CommandManager.RequerySuggested). Това е причината, поради която е важно методите на CanExecute да се поддържат бързи.
Възможно е също така да се справите сами с това, като създадете персонализирана ICommand
реализация, която не използва CommandManager за събитието CanExecuteChanged
.
person
Troels Larsen
schedule
30.03.2015
RelayCommand
обикновено изисква повторноCanExecuteChanged()
по всяко време, когато се промени свойство (мисля, че като стартирате CommandManager.InvalidateRequerySuggested всеки път, когато дадено свойство се промени), докатоDelegateCommand
не го прави и трябва ръчно да повдигнетеCanExecuteChanged
, когато дадено свойство разчита на промени. Освен това всички команди се преоценяват, когато са обвързани, така че нещо като скриване и след това показване на прозорец често ще задейства повторно запитване - person Rachel   schedule 12.12.2012