Существует общий случай, когда я связываю значение модели данных с элементом управления GUI, скажем, с TextInput.Модель данных извлекается из бэкэнда.
Если пользователь изменит значение TextInput, затем нажмите кнопку обновления, чтобы снова получить модель данных из бэкэнда, значение графического интерфейса не изменится обратно.Повторного связывания не происходит, так как значение модели данных не изменилось, событие propertyChanged не сработало.
В этом случае я должен программно установить значение модели в графический интерфейс после обновления данных.
Я знаю, что двунаправленное связывание может решить эту проблему (когда пользователь меняет значение в графическом интерфейсе, немедленно установите новое значение для модели данных).Но иногда я не могу использовать двунаправленную привязку, например, модель данных - это int, но пользователь вводит не-int значение, я не могу установить значение для модели данных.Таким образом, значение в модели данных не изменяется, при обновлении данных повторное связывание все равно не происходит.
Это сделает привязку данных бесполезной.Как решить эту проблему?
Я сейчас покажу здесь псевдокод, позже я добавлю реальный код:
1. retrieve a data model from server, via blazeds or something else.
2. bind the model to a TextInput on GUI.
3. user change the TextInput text.
4. User click a refresh button, triger retrieve the model value again.
5. Now since the model value do not change, no PropertyChanged event fired.
6. GUI value still is the user's input, not the value from the model.
Я могу очистить значение модели, прежде чем вернуть значение обратно, сделать заново-привязка происходит (но иногда вы не знаете, как очистить значение модели, например, взять int, вы можете не знать исходное значение и установить одно и то же значение).Или я могу вручную установить значение модели в GUI.Но оба не очень хорошо выглядят.Двунаправленное связывание не работает, так как, если пользователь ввел недопустимое значение, я не могу установить его для модели.Значения модели не меняются, повторного связывания не произойдет.