Windows Phone 7:面临传递参数的问题

时间:2013-01-04 09:19:34

标签: windows-phone-7 windows-7

目前我正在开发Windows手机应用程序,是的,这是我的第一个Windows应用程序。现在我正面临一个问题,不知道我犯了什么愚蠢的错误。是的,我当然已经完成了调试。

现在,我究竟在做什么?

  1. 将数据从第1页传递到第2页,
  2. 在页面上,在onNavigateTo()方法中捕获数据,是的,我正确接收它。
  3. 根据我得到的参数/数据(即ID),我正在进行网络服务电话。
  4. 问题: 如果我从2页移到第3页并再次回到第2页,它再次进行网络电话。即在下面的代码中再次拨打DownloadStringAsync

    即。如果第二页有ListBox有5个数据,现在点击特定项目我移动到第3页,如果我从第3页回到第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!!");
                }
            }
    }
    

3 个答案:

答案 0 :(得分:5)

您是否可以使用以下代码测试用户是否使用了后退按钮?

e.NavigationMode == System.Windows.Navigation.NavigationMode.Back

答案 1 :(得分:0)

有时这种方法(QueryString)会产生问题。

在后面的事件中,它会产生问题 它更好地将id(参数)存储在isolatedstorage应用程序密钥

IsolatedStorageSettings.ApplicationSettings [“id”] =“您的数据”;

答案 2 :(得分: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线程),要解决此问题,您可以使用network detection events