私は同じ問題に直面しました、それが私がそれを解決した方法です。
BaseView クラスを用意し、OnNavigatedTo をオーバーライドします
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (NavigatedToCommand != null && NavigatedToCommand.CanExecute(null))
NavigatedToCommand.Execute(null);
}
DependencyProperty を追加します。
public static readonly DependencyProperty NavigatedToCommandProperty =
DependencyProperty.Register("NavigatedToCommand", typeof(ICommand), typeof(BaseView), null);
public ICommand NavigatedToCommand
{
get { return (ICommand)GetValue(NavigatedToCommandProperty); }
set { SetValue(NavigatedToCommandProperty, value); }
}
必要なページで、xaml に追加します (そして、もちろん BaseView を継承します)
NavigatedToCommand="{Binding OnNavigatedToCommand}"
ViewModel では、make コマンド自体
public RelayCommand OnNavigatedToCommand
{ get { return new RelayCommand(OnNavigatedTo); } }
リストを更新するために呼び出したいメソッドを実装します
public async void OnNavigatedTo()
{
var result = await myDataService.UpdateMyList();
if (result.Status == OK)
MyList = result.List;
}
したがって、オーバーライドされた OnNavigatedTo() 内でリストを含むページに移動するたびに、NavigatedToCommand が実行され、OnNavigatedToCommand (xaml で設定) が実行され、OnNavigatedTo が呼び出され、リストが更新されます。
少し面倒ですが、MVVM :)
編集:クリーニングについてはどうですか。同じように機能する OnNavigatedFrom() で実行できます。または OnNavigatingFrom() も、場合によっては便利です。