2012-01-13 17 views
2

シナリオ:私のアプリのメインページから始めます。サブページAに移動して値を変更し、戻るボタンを押すと、メインページのバインドされたTextBlockは変更されません。サブページBに移動すると、同じバインディングを使用するTextBlockが変更されます。同様に、私がページAに再び行くと、私は変更された値を見る。アプリを終了すると、新しい値がメインページに表示されます。それはちょうどリフレッシュがトリガーされないことをバックボタンを使用するときです。MVVM-Lightを使用したバックナビゲーションでのバインディングのリフレッシュ

私はすべての私のINotifyPropertyChangedの作業をしています。私が言ったように、バインディングはメインページに戻ってナビゲートする以外のすべてのシナリオで動作します。どのようにしてメッセージを送信するか、そうでなければそのページ上のバインディングのリフレッシュをトリガーするのですか?ありがとう!

編集: willmelから受け入れ答えに基づいて

、ここで私がやったことだ:

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

マイMainViewModel.csファイル:

マイMainPage.xamlをファイルには、このマークアップを持っていますこれは次のとおりです。

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

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

私は次のマークアップ持っている別のビューで:

 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); 
     } 
    } 
:文字列を設定/取得するとき、私はこれを使用してそのビューモデルで

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

をD IはMainViewModelコンストラクタにこれを追加しました

答えて

2

ビューモデルでは、子ページがプロパティを変更した場合に変更する必要があります。あなたは子クラスでRaisePropertyChangedを使用する場合

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) 
    })); 

(プロパティはbool型ですが、何もすることができ、ここで注意してください)、放送オーバーロードを使用します。最後に

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

、あなたはAppコンストラクタ(App.xaml.cs

DispatcherHelper.Initialize(); 
+0

感謝に以下を追加する必要があり、DispatcherHelperを使用することに注意してください!これに基づいて変更を加えた後、私は必要なことをすることができました。私はこれに基づいていくつかの詳細を表示するために私のOPを変更しています。 – Stonetip

関連する問題