导航列表从一个页面到另一个Windows手机c#

时间:2014-05-28 09:17:21

标签: c# windows-phone-8

在我的Windows手机应用程序中,我有一个如下所示的联系人列表:

List<CustomContact> listOfContact1 = new List<CustomContact>();

以下是CustomContact类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using GetContacts.Resources;
using Microsoft.Phone.UserData;

namespace GetContacts
{
    class CustomContact
    {
        private string[] number = new string[5];
        public string Name { get; set; }
        //public string Number { get; set; }
        public string[] Number
        {
            get { return number; }
            set { number = value; }
        }
       // public string Number1 { get; set; }

        public CustomContact()
        {
        }

        //CTOR that takes in a Contact object and extract the two fields we need (can add more fields)
        public CustomContact( Contact contact)
        {
            Name = contact.DisplayName;
            int count = contact.PhoneNumbers.Count();
            for (int i = 0; i < count; i++)
            {
                if (count > 0 && contact.PhoneNumbers.ElementAt(i).PhoneNumber != null && !string.IsNullOrEmpty(contact.PhoneNumbers.ElementAt(i).PhoneNumber))
                {
                    Number[i] = contact.PhoneNumbers.ElementAt(i).PhoneNumber.ToString();
                }
                else
                {
                   Number[i] = "";
                }
            }
            /*var number = contact.PhoneNumbers.FirstOrDefault();
                if (number != null)
                    Number = number.PhoneNumber;
                else
                    Number = "";*/
        }
    }
}

我想从当前页面导航列表listOfContact1,如下所示:

private void hyplnk_Next_Click(object sender, RoutedEventArgs e)
{
    NavigationService.Navigate(new Uri("/createGroups.xaml?listOfContact1=" + listOfContact1, UriKind.Relative));
}

想要从下面的其他页面中检索:

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

            List<CustomContact> listOfContacts = new List<CustomContact>();
            if (NavigationContext.QueryString.TryGetValue("listOfContact1", out listOfContacts ))
            {
                //do anything from list
            }
        }

但我收到错误

Error 1: The best overloaded method match for 'System.Collections.Generic.IDictionary<string,string>.TryGetValue(string, out string)' has some invalid arguments此行NavigationContext.QueryString.TryGetValue("listOfContact1", out listOfContacts

并且

Error 2: Argument 2: cannot convert from 'out System.Collections.Generic.List<GetContacts.CustomContact>' to 'out string' at this line `out listOfContacts`

怎么做 我已经解决了,我正在关注此链接http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff626521%28v=vs.105%29.aspx并建议我如何将list of contacts从一个页面导航到另一个页面,等待您的回复。谢谢。

3 个答案:

答案 0 :(得分:1)

据我所知当你使用NavigationService的标准使用时你不能使用 QueryString 将复杂类型参数传递给另一个页面,你可以试试这里给出的解决方案,

Passing complex objects

答案 1 :(得分:1)

private void hyplnk_Next_Click(object sender, RoutedEventArgs e)
{
  NavigationService.Navigate("/createGroups.xaml?listOfContact1=1", listOfContact1); 
}

listOfContact1 = 1仅用于在另一页上获取它。

这是您将列表添加到uri的方式。

当您成功导航到您的页面createGroups.xaml时,您的OnNavigatedTo处理程序会以这种方式解析它:

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


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

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


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

希望这有帮助。

此链接将为您提供更多详细信息:: http://code.msdn.microsoft.com/wpapps/Pass-non-string-parameters-62ea2cc8 谢谢和干杯。

答案 2 :(得分:0)

您最多可以使用NavigationService.Navigate传递对象。

同样使用State

    PhoneApplicationService.Current.State["Contact"] = Contact;    

但是在这里你要传递那个不是很好的编程习惯的对象列表。

您可以在数据模型层(至少在UI层之上的图层)将此集合设为public static,然后在下一个屏幕或项目中的任何位置访问它。希望这会有所帮助。