1

別のページに移動するアイテムのリストがあります。そのページはビューモデルに接続されています。このビュー モデルのコンストラクターには、サーバーから特定のアイテムのデータを取得するコードがあります。

私が見つけたのは、戻るボタンを押して帽子リストから別の項目を選択すると、別のページに移動してもコンストラクターがヒットしないことです。

VMが作成され、新しいVMは必要ないと考えているためだと思います。リストから選択したときに常に新しいクリーンアップが取得されるように、クリーンアップを強制するにはどうすればよいですか?

4

1 に答える 1

0

私は同じ問題に直面しました、それが私がそれを解決した方法です。

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() も、場合によっては便利です。

于 2013-10-31T11:11:55.093 に答える