Что является хорошим способом обосновать включенное состояние кнопки OK в диалоговом окне на действительных элементах управления - PullRequest
0 голосов
/ 29 февраля 2012

Даже если я связываю кнопку с классом, полученным из ICommand, мне все равно остается выяснить, как кнопка должна вызывать метод CanExecute и обновлять ее включенное состояние.Я знаю о событии CanExecuteChanged, для которого регистрируется кнопка со связанной командой, но см. Следующий абзац, почему это хлопотно.

В простом старом диалоговом окне, состоящем из 10-15 элементов управления, онокажется случайным обрабатывать каждое уведомление об изменении для каждого из этих элементов управления, вызывая событие CanExecuteChanged в команде кнопки, вызывая влияние на состояние включенной кнопки возвращаемого значения метода CanExecute.Даже заявление о том, что нужно сделать в последнем предложении, было довольно громоздким.

Должен быть лучший способ кодирования диалогового окна WPF, чтобы кнопка подтверждения (например, ОК) была недоступна, пока все элементы управления не имеют действительной информации и не были активированы в этот момент времени (т. Е. Когда всеэлементы управления должным образом заполнены).Пример кода, идеи и ссылки на статьи будут очень благодарны.

Спасибо

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Я не вижу здесь ничего случайного. Поскольку ваше условие: « все контролы имеют действительную информацию», это может произойти после того, как любой элемент управления отредактирован, и поэтому вам необходимо прослушивать уведомления об изменениях со всех элементов управления.

0 голосов
/ 29 февраля 2012

В обычном старом диалоге, состоящем из 10-15 элементов управления, кажется случайным, что приходится обрабатывать каждое уведомление об изменениях для каждого из этих элементов управления,

Я недумаю так.Каждое событие, помеченное флажком Textbox, обрабатывается одним и тем же обработчиком, скажем SetState(), который вычисляет общее состояние диалога.Каждый раз, когда элемент управления редактируется, все состояние пересчитывается.

, пока все элементы управления не будут иметь действительную информацию

Тогда этот объект будет иметь логическое свойство EnableOKButton, давайтескажем, который устанавливается в соответствии с обновленным состоянием.Затем это свойство привязывается к свойству Enabled кнопки, поэтому оно автоматически изменяется - без учета посторонних событий.

...