MVVM Light - метод CanExecute для экземпляра RelayCommand всегда выполняется - PullRequest
0 голосов
/ 10 августа 2010

Я пробовал с минимальным приложением, просто текстовое поле и кнопка. Кнопка привязана к экземпляру RelayCommand, а метод CanExecute просто возвращает true или false со случайным образом. Текст текстового поля связан со строковым свойством.

Что меня бесит, так это то, что метод CanExecute вызывается «всегда»: изменение сфокусированного элемента, нажатие клавиши в текстовом поле, кажется, что все запускает вызов моего метода CanExecute. Это «особенность» светового инструментария mvvm? Это происходит в "нормальном" wpf-приложении?

Да, я знаю, я думаю, что я должен знать больше о системе commandind в wpf ...; -)

Спасибо за ответы!

David

1 Ответ

0 голосов
/ 10 августа 2010

CanExecute используется для определения, позволяет ли текущее состояние команде выполнить.Обычно это связано со свойством IsEnabled для отключения команды.

Это также должно быть связано со свойством в вашей ViewModel, которое указывает, позволяет ли текущее состояние просмотра выполнять.

Это связано слюбой триггер события в окне хостинга, так как любое событие может вызвать изменение состояния CanExecute.

Эта ссылка подтверждает, что оно срабатывает при любом событии в окне хостинга.

http://robburke.net/2008/04/23/wpf-command-pattern-when-does-it-query-canexecute/

Почему вы думаете, что его все время называют проблемой?Пока у вас нет интенсивной логики в связанном свойстве, все будет хорошо.

...