将列表从一个页面导航到另一个windowsphone c#

本文关键字:导航 另一个 windowsphone 一个 列表 | 更新日期: 2023-09-27 18:05:43

在我的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从一个页面导航到另一个页面,等待您的回复。谢谢

将列表从一个页面导航到另一个windowsphone c#

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

传递复杂对象

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谢谢,干杯。

您可以使用NavigationService.Navigate最大限度地传递对象。

同样使用State类似:

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

但在这里,您想要传递该对象的列表,这不是一个好的编程实践。

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