-2

現在、私は Windows phone アプリを開発しています。はい、これは私の最初の Windows アプリです。今、私は問題に直面しています。私が犯したばかげた間違いが何であるかわかりません。はい、もちろんデバッグを行いました。

今、私は正確に何をしていますか?

  1. 1ページ目から2ページ目にデータを渡し、
  2. ページ上で、onNavigateTo() メソッド内でデータをキャッチしています。はい、正しく受信しています。
  3. 取得したパラメーター/データ (つまり ID) に基づいて、Web サービスを呼び出しています。

問題: 2 ページから 3 ページに移動し、再び 2 ページに戻ると、再び Web 呼び出しが行われます。DownloadStringAsyncつまり、以下のコードで再度呼び出します。

つまり、2 ページ目に 5 つのデータを含む ListBox がある場合、特定のアイテムをクリックすると 3 ページ目に移動します。3 ページ目から 2 ページ目に戻った場合、アイテムは 2 倍、つまり 10 アイテムになります (再度呼び出しを行うため)

参照用の可能なコードは次のとおりです。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
       base.OnNavigatedTo(e);

       type = Convert.ToInt32(NavigationContext.QueryString["Type"]);
       if (type != 0)
       {
           if (NetworkInterface.GetIsNetworkAvailable())
           {
              client.DownloadStringAsync(new Uri(Utils.Constant.WebService_URL));
            }
            else
            {
                    MessageBox.Show("Please check internet connection!!");
            }
        }
}
4

3 に答える 3

5

次のコードを使用して、ユーザーが戻るボタンを使用したかどうかをテストできませんか?

e.NavigationMode == System.Windows.Navigation.NavigationMode.Back
于 2013-01-04T10:50:04.340 に答える
0

時々、このメソッド (QueryString) が問題を引き起こします。

バックイベントでは、ID(パラメーター)をisolatedstorageアプリケーションキーに保存する方が良い問題が発生します

IsolatedStorageSettings.ApplicationSettings["id"] = "あなたのデータ";

于 2013-01-04T10:16:56.067 に答える
0

OnNavigatedTo進むナビゲーションまたは戻るナビゲーションのいずれかによって、ページに移動するたびに呼び出されます。これが、ページ #3 からページ #2​​ に戻るときに再トリガーされる理由です。

これは、前方ナビゲーションでのみネットワーク呼び出しをトリガーすることで回避できます。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
   base.OnNavigatedTo(e);

   if (this.isInitialized) return;

   type = Convert.ToInt32(NavigationContext.QueryString["Type"]);
   if (type != 0)
   {
       if (NetworkInterface.GetIsNetworkAvailable())
       {
          client.DownloadStringAsync(new Uri(Utils.Constant.WebService_URL));
        }
        else
        {
                MessageBox.Show("Please check internet connection!!");
        }
    }
    this.isInitialized = true;
}

NetworkInterface.GetIsNetworkAvailable一部のシナリオでは (この場合は UI スレッド) が長時間ブロックされる可能性があることに注意してください。これを回避するには、ネットワーク検出イベントを使用できます。

于 2013-01-04T10:32:14.507 に答える