WP7 - Почему мои привязки не срабатывают при нажатии кнопки возврата окон? - PullRequest
1 голос
/ 22 января 2011

Надеюсь, есть очевидный ответ на это, что мой мозг в 2 часа ночи не видит (я основываю это на том факте, что не могу найти никого другого с такой же проблемой).Кнопка «Аппаратное / встроенное» назад на моем телефоне Windows 7 ни одна из моих привязок не переоценивает.Например, на моей главной странице у меня есть кнопка «IsEnabled», связанная со свойством bool в моей ViewModel, которая проверяет, находится ли значение в изолированном хранилище.В эмуляторе он запускается как отключенный (очевидно).Затем я перехожу на другую страницу и добавляю требуемое значение в изолированное хранилище.Когда я нажимаю аппаратную кнопку «Назад», чтобы вернуться на исходную страницу, привязка не переоценивается, и моя кнопка остается отключенной.

Однако если я вернусь к MainPage с помощью кода, используя метод навигации, привязка будет переоценена, и все будет хорошо.

Есть идеи, почему?

Ответы [ 2 ]

0 голосов
/ 24 января 2011

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

Вы можете переоценить любые привязки в переопределении OnNavigatedTo для страницы, но это вносит значительный вклад«Кодовый запах».Как упоминалось выше, использование Messenger позволит вам обновить связанную модель представления, которая обновит привязку на странице.

0 голосов
/ 22 января 2011

Проблема звучит так, как будто метод RaisePropertyChanged не поднимается вашей MVVM Light ViewModel - если вы привязываете метод доступа Get {} вашего свойства IsEnabled в viewmodel непосредственно к значению IsolatedStorage, то ViewModel не узнаю, что это базовое значение обязательно изменилось.

Когда вы записываете значение в IsolatedStorage, вы можете использовать интерфейс Messenger в MVVM, чтобы уведомить рассматриваемую модель ViewModel о том, что оно должно инициировать событие RaisePropertyChanged () для вашей модели, и это приведет к повторному связыванию этого свойства в вашем вид.

...