Проверка WPF и команда CanExecute

Я пытаюсь понять суть моего последнего вопроса и внести некоторую ясность в описание.

Дана форма WPF для отправки новых данных с двумя текстовыми полями и кнопкой «Сохранить». Оба текстовых поля являются обязательными и привязаны к свойствам ViewModel. Кнопка привязана к команде реле «Выполнить» с помощью методов Execute и CanExecute. CanExecute возвращает !HasErrors ViewModel. ViewModel реализует интерфейсы INotifyPropertyChanged и INotifyDataErrorInfo. Средство установки свойств запускает проверку только для этого свойства.

Цели:

  • Сначала отключите кнопку «Сохранить».
  • Включите кнопку «Сохранить», только если оба текстовых поля успешно проверены без проверки всей ViewModel при каждом изменении свойства.

Для первой цели я использую логическое свойство isValidated, которое изначально имеет значение false и становится истинным, как только происходит первая проверка. Затем это свойство проверяется вместе с HasEros в методе CanExecute. Есть ли более элегантный способ?

Я понятия не имею, как реализовать вторую цель. Есть мысли по этому поводу?

Спасибо


person toppless    schedule 11.01.2014    source источник
comment
Какую реализацию ICommand вы используете? У вас есть метод RaiseCanExecuteChanged() или аналогичный? Вызывайте это каждый раз, когда меняются соответствующие свойства.   -  person Gusdor    schedule 11.01.2014
comment
У меня реализованы только методы Execute и CanExecute. Как поможет реализация RaiseCanExecuteChanged()?   -  person toppless    schedule 11.01.2014
comment
У меня есть реализация события CanExecuteChanged. общественное событие EventHandler CanExecuteChanged { добавить { CommandManager.RequerySuggested += значение; } удалить { CommandManager.RequerySuggested -= значение; } }   -  person toppless    schedule 11.01.2014


Ответы (1)


Ваши две цели — это только одна цель на самом деле. Давайте сначала посмотрим на вашу вторую цель:

• Включайте кнопку «Сохранить», только если оба текстовых поля успешно проверены без проверки всей ViewModel при каждом изменении свойства.

Изначально ваши текстовые поля будут пустыми, поэтому, вероятно, они не пройдут проверку. Поэтому изначально ваш Save Button будет отключен в соответствии с вашей первой целью:

• Сначала отключите кнопку «Сохранить».

Во-вторых, в вашем последнем вопросе (на который вам, вероятно, следует добавить ссылку, если вы собираетесь упомянуть об этом в этом посте) у вас возникла проблема с использованием !HasErros в обработчике CanExecute. На этот раз вам действительно нужно проверить все свойства вместе, чтобы выполнить второе требование... поэтому просто используйте !HasErros в обработчике CanExecute.

person Sheridan    schedule 13.01.2014