1

新しいインスタンスを再作成したり、NavigationStack を変更したりせずに、NavigationStack 内のページに移動したいと考えています。

これは可能ですか?

例えば:

NavigationStack: 
    Page1.xaml
    Page2.xaml
    Page3.xaml

ここで、Page1.xaml を使用していて、Page3.xaml に再度移動したいとします。私が走れば

NavigationService.Navigate(new Uri("/Page3.xaml", UriKind.Relative));
別の Page1 オブジェクトを作成してそのオブジェクトに移動しますが、既存のページ オブジェクトを再度使用したいと考えています。

ありがとう

4

2 に答える 2

2

を呼び出すNavigationService.Navigate()と、指定されたページの新しいインスタンスが作成されます。それがシステムの仕組みです。

バック スタックに存在するページに移動する場合は、2 つのオプションがあります。

  1. バックスタックをクエリして、問題のページに戻ります。この結果、認識されているバック スタックの動作が壊れる可能性があり、ページのライフサイクルにも回避する必要がある他の問題が発生する可能性があります。また、クエリ文字列を使用しない方法で、移動先のページ間で通信する必要があります。

  2. ページをシングルトン ビュー モデルに完全にバインドします。つまり、ページ上のすべてがビューモデルの単一のインスタンスにバインドされます。その後、そのページの新しいインスタンスに移動すると (移動によって VM が変更/更新されないと仮定して)、バック スタック上の他のインスタンスと同じデータ、構成などが保持されます。

アプリケーションは、ナビゲーションのためにハブ アンド スポーク構造に従う必要があります。上記のいずれかを行うと、期待されていることに対するユーザーの認識が損なわれる可能性があります。上記のいずれかを実行する場合は、プラットフォームに精通し、プラットフォームの慣習を破った場合の結果を理解しているユーザーで徹底的にテストしてください。

于 2012-12-13T13:05:10.103 に答える
1

http://mvvmlight.codeplex.com/を見てください

すべてのページは、アプリケーションの起動中に作成される静的オブジェクトです

于 2012-12-14T06:21:09.550 に答える