在我的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
从一个页面导航到另一个页面,等待您的回复。谢谢。
答案 0 :(得分:1)
据我所知当你使用NavigationService的标准使用时你不能使用 QueryString 将复杂类型参数传递给另一个页面,你可以试试这里给出的解决方案,
答案 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
,然后在下一个屏幕或项目中的任何位置访问它。希望这会有所帮助。