1

別のビューを開くコマンドを持つ ViewModel があります。

public ICommand OpenAnotherViewCommand
{
    get 
    {
        return new MvxCommand(() => ShowViewModel<AnotherViewModel>());
    }
}

ここまでは順調ですね。次にAnotherViewModel、最初のビュー モデルに戻りたいと思います。もともと私はこのようなことをしました:

public ICommand ReturnCommand
{
    get
    {
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        // Add some stuff from this model to pass to the first view model

        return new MvxCommand(() => {
            ShowViewModel<FirstViewModel>(parameters);
        }
     }
 }

InitFromBundle最初のビューモデルにを追加しましたが、これも機能しました。しかし、その後、元の最初のビュー モデルがまだ存在していることに気付きました (イベント ハンドラーが複数回起動しているように見えるため、これに気付きました!)。私ShowViewModelは新しい を作成しましたFirstViewModelが、古いものは決して破棄されませんでした (今では非常に明白なようです)。したがって、ビューのスタックは、first -> another -> firstちょうどあるべきときfirstです。

そのため、顔をパーミングした後、ShowViewModelinReturnCommandをに置き換えClose(this)たところ、ナビゲーションの問題が修正され、不要なビューモデルの長い行が生成されなくなりました。ただし、私が失ったのは、データをAnotherViewModel最初のものに戻す機能です。

では、2 番目のビュー モデルが閉じられたときに、最初のビュー モデルにデータを戻すにはどうすればよいでしょうか?

4

1 に答える 1

2

1

既にご存知かもしれませんが、別のビュー モデルからアクセスできるビュー モデルでいつでも変数の形式を使用できます。たとえば、静的変数を使用します。ただし、アプリケーション全体でこのパターンを繰り返す場合は、特にお勧めできません。

2

あなたの場合、 MvvmCross Messenger pluginの恩恵を受けることができると思います。実装の詳細については、MvvmCross N+1のN=9 を参照してください。サンプル ソース コードもここから入手できます。

メッセンジャープラグインを使えば簡単です。子ビューを閉じる前にメッセージを発行するだけです。親ビューは、その種のメッセージを受信するために既にサブスクライブしており、残りは簡単です。

于 2013-08-15T06:50:39.223 に答える