【问题标题】:Windows phone 7: facing issue for passing parametersWindows phone 7:面临传递参数的问题
【发布时间】:2013-01-04 09:19:34
【问题描述】:

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

现在,我到底在做什么?

  1. 将数据从第一页传递到第二页,
  2. 在页面上,在 onNavigateTo() 方法中捕获数据,是的,我接收正确。
  3. 根据我得到的参数/数据(即 ID),我正在调用 Web 服务。

问题: 如果我从第 2 页移到第 3 页并再次回到第 2 页,则它再次进行网络调用。 即在下面的代码中再次调用 DownloadStringAsync

即如果第 2 页的 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!!");
            }
        }
}

【问题讨论】:

    标签: windows-phone-7 windows-7


    【解决方案1】:

    你不能用下面的代码来测试用户是否使用了返回按钮吗?

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

    【讨论】:

      【解决方案2】:

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

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

      IsolatedStorageSettings.ApplicationSettings["id"] = "你的数据";

      【讨论】:

        【解决方案3】:

        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

        【讨论】:

        • 感谢您的宝贵建议。现在,如果我包含 isInitialized 行,那么它的显示错误,当我将鼠标指针放在那里时,它显示 2 个选项:isInitialized 的初始化属性存根和 **isInitialized 的初始化字段存根?哪一个是正确的?
        • 您需要创建布尔 this.isInitialized 字段(我的答案中未显示)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多