将列表从一个页面导航到另一个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
从一个页面导航到另一个页面,等待您的回复。谢谢
据我所知,当你使用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
,然后在下一个屏幕或项目中的任何位置访问它。希望这能有所帮助。