如何使用WP8 c#导航字符串消息和列表并将其检索到另一个页面#

时间:2014-06-02 05:03:22

标签: c# windows-phone-8

在我的Windows Phone应用程序中,我有两个页面CreateGroupsGroupOfContacts,我想使用按钮之类的方式将CreateGroups中的列表和字符串消息导航到GroupOfContacts页面下面:

        private void btn_Click(object sender, RoutedEventArgs e)
        {
List<CustomContact> contact = new List<CustomContact>();
            PhoneApplicationService.Current.State["contactlist"] = contact;
            NavigationService.Navigate(new Uri("/GroupOfContacts.xaml?msg=" + buttonName, UriKind.RelativeOrAbsolute));
            NavigationService.Navigate(new Uri("/GroupOfContacts.xaml?contactlist=" + contact, UriKind.RelativeOrAbsolute));
        }

我将字符串消息收到GroupOfContacts页面,如下所示:

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

    string msg = "";
    if (NavigationContext.QueryString.TryGetValue("msg", out msg))
    {
        tblk_GroupName.Text = msg;
    }
    if (PhoneApplicationService.Current.State["contactlist"] != null)
    {
        listcontact = (List<CustomContact>)(PhoneApplicationService.Current.State["listOfContact"]);
    }  
}

但它让我在这一行listcontact = (List<CustomContact>)(PhoneApplicationService.Current.State["listOfContact"]);

中出现异常

例外情况如下:

A first chance exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.ni.dll

Additional information: The given key was not present in the dictionary.

有没有办法解决它或者请建议如何将字符串消息和列表一起导航并使用WP8 c#从其他页面检索。帮我等你的回复。 感谢。

2 个答案:

答案 0 :(得分:1)

当您需要使用NavigationService传递多个参数时,您应该使用“&amp;”。 但在这里你需要传递一个清单。所以这不够。

尝试这是否有帮助。

    private void hyplnk_Next_Click(object sender, RoutedEventArgs e)
    {
      NavigationService.Navigate("/GroupOfContacts.xaml?msg=" +buttonName+ "&listOfContact=1", listOfContact); 
    }

并在另一页上访问它,如::

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
       // Store test data. 
       List<CustomContact> listContacts = new List<CustomContact>(); 

       string msg;
       if (NavigationContext.QueryString.TryGetValue("msg", out msg))
       {
           tblk_GroupName.Text = msg;
       }

       // Request parameter. The identification of the source page. 
       string parameter = NavigationContext.QueryString["listOfContact"]; 

       switch (parameter) 
       { 
           case "1": 
               var myParameter = NavigationService.GetLastNavigationData(); 


               if (myParameter != null) 
               { 
                   listContacts = (List<CustomContact>)myParameter; 
               } 
               break; 
       }
}

希望有所帮助:)

答案 1 :(得分:0)

您还可以将App类(app.xaml.cs)中的变量定义为公共静态变量,并使用

从任何页面访问它们

App.buttoName