4

私はWindowsPhoneアプリケーションに取り組んでいますが、問題があるシナリオは次のとおりです。

だから私は3つのページを持っています、それをページ1、2、3と呼びましょう。

1ページ目に、というボタンがありますstart downloading。ボタンをクリックして使用NavigateService.Navigate(page2Uri)し、page2に移動します。

ページ2はクエリを実行し、インターネットから画像をダウンロードするため、OnNavigateToハンドラーでページバックスタックを確認し、ページ1から移動した場合は、ダウンロードを実行します。このページのアプリバーには、page3に移動できるボタンがあります。

ページ3は、ページ2でダウンロードされた画像に対していくつかの動作を実行するオプションのリストです。オプションを選択したら、2ページに戻って、ロードされた画像に対していくつかの動作を実行したいと思います。
ここで問題が発生します。page3からpage2に移動するため
に使用すると、Page2コンストラクターとハンドラーが再度呼び出され、既に取得したすべてのインスタンス変数が失われます。 しかし、使用するとpage2に戻り、バックスタックのトップエントリがpage1であることがわかります(page1-> page2-> page3以降)。したがって、すべてが再度ダウンロードされます。NavigateService.Navigate(page2Uri)OnNavigateTo
NavigatService.GoBack

ページ3からページ2に戻るときに、何もダウンロードされないようにします。だから誰かがこれについて良い考えを持っているかどうか疑問に思います。

ありがとうございました。

4

3 に答える 3

5

クエリパラメータとNavigationEventArgsを使用すると役立ちます。

まず、NavigationEventArgsを使用して、NavigationModeをチェックすることにより、ユーザーが前進しているかバックグラウンドであるかを判断できます。

次に、クエリパラメータを使用して、ページ2にダウンロードするように指示できます。

ページ1から:

private void MoveToPage2FromPage1()
{
    NavigationService.Navigate(new Uri("/Page2.xaml?shouldDownload=true", UriKind.Relative));
}

およびpage2:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.NavigationMode == NavigationMode.Back) return;

    string shouldDownload = ""; //May not be needed if you'll only ever go to page 2 from page 1 to download...
    if (NavigationContext.QueryString.TryGetValue("shouldDownload", out shouldDownload))
    {
        Convert.ToBoolean(shouldDownload);
    }
}
于 2012-08-07T19:05:34.590 に答える
2

別のページにデータを渡す方法はいくつかあります。

  • Shawnが提案したように、クエリパラメータを使用できます。
  • app.csのようにどこかに保存されているグローバルデータを使用できます
  • 静的クラスを使用してデータを保持できます。
  • 共有viewModelを使用してパラメーターを保持できます。(またはビューモデルの静的プロパティ)

それはすべて特定のケースに依存します。クエリパラメータを使用するというShawnsの提案は、おそらく最も「正しい」MVVMの方法だと思いますが、他の方法もその代わりになります。

于 2012-08-08T05:04:57.630 に答える
0

以下の機能とナビゲーションサービスを実装する必要があります。これらのコードは間違いなくあなたの問題を解決します

2つ以上のパラメーターの場合は、このコードを使用します

String download="true";
String file="image";
NavigationService.Navigate(new Uri("/Page3.xaml?download="+download+"&file="+file+"", UriKind.Relative));

OnNavigatedToで、次のコードをPage2に追加します

 protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            String download=NavigationContext.QueryString["download"];  
          String file=NavigationContext.QueryString["file"]; 

        }

上記の場合、OnNavigatedTo関数はtrueとimageを出力します。MessageBox.Show();出力に使用できます

于 2016-07-15T08:22:37.907 に答える