シナリオ:私のアプリのメインページから始めます。サブページ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コンストラクタにこれを追加しました
感謝に以下を追加する必要があり、
DispatcherHelper
を使用することに注意してください!これに基づいて変更を加えた後、私は必要なことをすることができました。私はこれに基づいていくつかの詳細を表示するために私のOPを変更しています。 – Stonetip