2017-04-10 15 views
0

私は2つのビューを持っています。私はview1でやっていることをして、データはバインドされています。私がボタンをクリックすると、私はview2に行きます、私は何をし、view1に戻ります。もちろんに.How(私はいくつかのデータを失う)InitializeComponent();背後VIEW1コードでと私はViewModelにのコンストラクタをVIEW1に戻るたびに呼び出され、新しいオブジェクトが作成されたビューのDataContextのにDataContext = IocContainer.StaticContainer.Resolve<MediaViewModel>();戻ってナビゲートしたときにdatacontextを再インスタンス化しないようにする(VMコンストラクタを再度呼び出さないようにする)

を設定navigateでconscructorを呼び出さずにview1に戻るか、新しいオブジェクトを再び初期化しないか?

+0

を使用していますか? –

+0

@FlorianMoser Unity、そのdatacontextだけが失われます。 –

答えて

3

ナビゲーション中にページの状態を保持したい場合は、Page.NavigationCacheModeを設定する必要があります。これにより、前のインスタンスがメモリに保持され、そのインスタンスに戻るときに使用されます。

UWPでは、デフォルトで、ナビゲーションは常に次のページに進むときに現在のページを破棄します。戻ると、データ・コンテキストとそのページに必要なその他のデータ要素を含むページ全体が再作成されます。これは、メモリ使用量を低く保ちます。

メモリに保存しているすべてのページがアプリでメモリを消費するため、注意してください。

はあなたのコンストラクタでこれを実行するためのコード:どのような `IocContainer`あなたは

public MyPage() 
{ 
    // Page cached if the cache size of the parent Frame is large enough 
    NavigationCacheMode = NavigationCacheMode.Enabled; 

    // Or, page is always cached 
    NavigationCacheMode = NavigationCacheMode.Required; 
} 
+0

ありがとう、それは私のマシン上で動作します:)。これはwpfの問題ではないでしょうか? –

+1

WPFはページをメモリに保持するためのメカニズムが異なりました。私はそれがPage.KeepAliveプロパティだと信じています...しかし、それはまたあなたが使ったフレームワークとそれがBack/Forwardの振る舞いをどのように実装したかにも依存していました。 –

関連する問題