2013-07-03 2 views
5

У меня есть приложение MVC MVP MVC, которое отлично работает.WPF RaisePropertyChanged событие на потерянном фокусе

Единственная проблема заключается в изменении текстового поля и нажатии на меню. Если я делаю это без нажатия на другой элемент управления, событие view-> viewmodel никогда не запускается, потому что текстовое поле не потеряло фокус. Исправьте меня, если я ошибаюсь, но я думаю, что RaisePropertyChanged только уволен на LostFocus (или OnBlur, или любое подобное событие).

Таким образом, нажатие кнопки сохранения меню сразу после редактирования текстового поля приводит к тому, что viewmodel сохраняет данные с использованием старых значений.

Так, возобновляя:

Эта последовательность работает отлично:

  1. Редактировать текстовое поле
  2. Нажмите на другой элемент управления
  3. RaisePropertyChanged увольняют, то ViewModel обновляется
  4. Нажмите на сохранить в меню
  5. Данные сохранены с правильными значениями

Эта последовательность дает мне ошибку:

  1. Редактировать текстовое поле
  2. Нажмите на кнопку Сохранить в меню
  3. данные, сохраненные с правильными значениями

Как решить эту проблему ?

ответ

10

Это обычная версия с TextBoxes как в WPF, так и в WinForms. Вы можете обойти это, поручив системе привязки обновлять виртуальную машину с каждым изменением в TextBox вместо того, когда она теряет фокус. Для этого установите UpdateSourceTrigger привязки к PropertyChanged. Это будет записываться обратно на виртуальную машину в любое время, когда TextBox вызывает событие PropertyChanged для своего Text.

<TextBox Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
8

Для свойства зависимостей TextBox.Text, его значение по умолчанию UpdateSourceTrigger равно LostFocus (т. Е. Ваше свойство модели просмотра обновляется, когда управление теряет фокус). Чтобы немедленно обновить свойство всякий раз, когда вводится текст, установите UpdateSourceTrigger=PropertyChanged. (См. Ссылку выше для получения дополнительной информации - на самом деле это касается вашего примера.)

Смежные вопросы