Обновление привязок при обратной навигации с помощью MVVM-Light - PullRequest
2 голосов
/ 14 января 2012

Сценарий: я начинаю с главной страницы моего приложения.Я перехожу на подстраницу А, меняю значение, нажимаю кнопку «Назад», и связанный текстовый блок на главной странице не меняется.Если я перейду на подстраницу B, TextBlock, использующий эту же привязку, изменится.Аналогично, если я снова перейду на страницу A, я увижу измененное значение.Если я выйду из приложения, новое значение появится на главной странице.Просто при использовании кнопки «Назад» обновление не запускается.

У меня все работающее INotifyPropertyChanged работает.Как я уже сказал, привязка работает в любом сценарии, кроме перехода на главную страницу.Как отправить сообщение или иным образом вызвать обновление привязок на этой странице?Спасибо!

Редактировать:

На основании принятого ответа от willmel, вот что я сделал:

Мой файл MainPage.xaml имеет следующую разметку:

<TextBlock Text="{Binding Title, Mode=OneWay}" />

Мой файл MainViewModel.cs имеет следующее:

       public string Title
    {
        get { return ProfileModel.Instance.DescriptionProfile.Title; }
    }

И я добавил это в конструктор MainViewModel:

Messenger.Default.Register<PropertyChangedMessage<string>>(this,
        (action) => DispatcherHelper.CheckBeginInvokeOnUI(
        () => RaisePropertyChanged("Title")));

В другом представлении у меня естьследующая разметка:

<TextBox Grid.Row="1" Width="250" Height="100" Text="{Binding TitleEdit, Mode=TwoWay}" />

В ее модели представления я использую это при получении / установке строки:

        public string TitleEdit
    {
        get { return ProfileModel.Instance.DescriptionProfile.Title; }

        set
        {
            if (ProfileModel.Instance.DescriptionProfile.Title == value) return;

            string oldValue = ProfileModel.Instance.DescriptionProfile.Title;


            ProfileModel.Instance.DescriptionProfile.Title = value;

            RaisePropertyChanged("Title", oldValue, value, true);
        }
    }

1 Ответ

2 голосов
/ 14 января 2012

В вашей модели представления вы хотите измениться, если дочерняя страница изменяет свойство. (обратите внимание, что свойство относится к типу bool, но может быть любым)

  Messenger.Default.Register<PropertyChangedMessage<bool>>(this,
    (action) => DispatcherHelper.CheckBeginInvokeOnUI(
   () =>
      {
         MessageBox.Show(action.newValue.ToString());
         //do what you want here (i.e. RaisePropertyChanged on a value they share)
     }));

Когда вы используете RaisePropertyChanged в дочернем классе, используйте перегрузку широковещания.

RaisePropertyChanged("Preference", oldValue, value, true);

Наконец, обратите внимание, что для использования DispatcherHelper вам необходимо добавить следующее в ваш App конструктор (App.xaml.cs)

DispatcherHelper.Initialize();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...