3

同様のロジックを含む 2 つのページがあります。ページをロードし、他のボタンを表示/非表示にするいくつかのボタンをクリックして、次のページに進みます。次のページを押したときに戻るボタンをクリックすると、前のページに戻ります。

違いは、1 つのページ (FirstPage) には、戻るボタンをクリックしたときに呼び出されるコンストラクターがあり、デフォルトをリセットするための呼び出しがあることです。他のページ (SecondPage) ではコンストラクターが呼び出されず、その理由がわかりません。

public FirstPage()
{
  InitializeComponent();
  DisplayStuff();
}

FirstPage が にKeepAlive設定されましたFalse

public SecondPage(object arg1, object arg2)
{
  InitializeComponent();
  DisplayStuff(arg1, arg2);
}

このページも にKeepAlive設定されていFalseます。これら 2 つのページは何も継承せず、プロパティをオーバーライドするものはありません。私が見ることができる唯一の違いは空のコンストラクターであるため、SecondPage に空のコンストラクターを与えてみましたが、まだうまくいきません。

私は WPF に比較的慣れていないので (6 か月ごとに 1 時間か 2 時間作業しています)、何が足りないのでしょうか?

関連する場合の戻るボタンを次に示します。

<Button Command="{x:Static NavigationCommands.BrowseBack}" />

編集: [戻る] ボタンをクリックすると、SecondPage の状態が保持されません。DisplayStuffまだ呼び出されていないため、空のページをロードするだけです。

ナビゲーション コード:

NavigateTo(new SecondPage(arg1, arg2));

protected void NavigateTo(Page page)
{
  NavigationService.Navigate(page);
}
4

2 に答える 2

1

Paul Stovell の WPF ナビゲーションに関する記事を読んだ後、表示したい方法が機能しません。

移動中に [戻る] をクリックすると、WPF はコンストラクターに渡す値を認識できない可能性があります。したがって、ページを維持する必要があります。トレース出力は次のとおりです。

WPF はコンストラクターを呼び出すことができないため、呼び出しません。ページを存続させるだけです。

彼は続けて、 URIをKeepAlive介してナビゲートしていない場合は機能せず、毎回呼び出されるので、すべてのロジックをそこに移動するだけで、コンストラクターをバック ナビゲーションで呼び出す必要はないと述べています。 .LoadedUnloaded

于 2011-04-12T21:26:45.420 に答える
1

同様のサンプル アプリケーションを作成し、同様の動作をしました。ページに戻ると、そのページがジャーナルの最初のページでない限り、コンストラクターは呼び出されないことがわかりました

Navigation in WPFのこのセクションを読んでください。

ジャーナルを使用してページ Page に戻ると、次の手順が実行されます。

  1. ページ (バック スタックの一番上のジャーナル エントリ) がインスタンス化されます。

  2. ページは、ページのジャーナル エントリと共に保存された状態で更新されます。

  3. ページに戻ります。

幸運を!

于 2011-04-12T21:18:16.847 に答える