在Windows Phone 8中选择联系人
我正在尝试将基本联系人列表添加到我的应用程序中。
到目前为止,该应用程序查询联系人存储并在列表中显示所有内容。
我需要的是一个数据结构,其中包含用户从列表中选择的每个联系人的姓名和号码。
我很想看到你的想法。 我相信这将是我错过的简单事情,但我已经尝试了很多,我现在非常困惑。
以下是相关的代码段和随附的XAML。 非常感谢您的参与。 C#更新
namespace appNamespace { public partial class contact : PhoneApplicationPage { public class CustomContact { public string Name { get; set; } public string Number { 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; var number = contact.PhoneNumbers.FirstOrDefault(); if (number != null) Number = number.PhoneNumber; else Number = ""; } } public contact() { InitializeComponent(); } private void showContacts(object sender, RoutedEventArgs e) { Contacts cons = new Contacts(); //Identify the method that runs after the asynchronous search completes. cons.SearchCompleted += new EventHandler(Contacts_SearchCompleted); //Start the asynchronous search. cons.SearchAsync(String.Empty, FilterKind.None, "Contacts Test #1"); } void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) { //Do something with the results. MessageBox.Show(e.Results.Count().ToString()); try { //Bind the results to the user interface. ContactResultsData.DataContext = e.Results; } catch (System.Exception) { //No results } if (ContactResultsData.Items.Any()) { ContactResultsLabel.Text = "results"; } else { ContactResultsLabel.Text = "no results"; } } public void saveContacts(object sender, RoutedEventArgs e) { List listOfContacts = new List(); listOfContacts = e.Results.Select(x => new CustomContact() { Number = x.PhoneNumbers.FirstOrDefault() != null ? x.PhoneNumbers.FirstOrDefault().PhoneNumber : "", Name = x.DisplayName }).ToList(); } private void ContactResultsData_SelectionChanged(object sender, SelectionChangedEventArgs e) { Contact contact = ContactResultsData.SelectedItem as Contact; if (contact != null) { CustomContact customContact = new CustomContact(contact); } } } }
XAML
你可以创建你的课程
public class CustomContact { public string Name { get; set; } public string Number { 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) { DisplayName = contact.DisplayName; var number = contact.PhoneNumbers.FirstOrDefault(); if(number != null) Number = number.PhoneNumber; else Number = ""; } }
然后迭代结果并将它们添加到您的class级
List listOfContacts = new List (); foreach (var c in e.Results) { CustomContact contact = new CustomContact(); contact.DisplayName = c.DisplayName; var number = c.PhoneNumbers.FirstOrDefault(); //change this to whatever number you want if (number != null) contact.Number = number.PhoneNumber; else contact.Number = ""; listOfContacts.Add(contact); } ContactResultsData.DataContext = listOfContacts;
您可以将上面的foreach
循环缩短为单个LINQ查询
listOfContacts = e.Results.Select(x => new CustomContact() { Number = x.PhoneNumbers.FirstOrDefault() != null ? x.PhoneNumbers.FirstOrDefault().PhoneNumber : "", DisplayName = x.DisplayName }).ToList();
根据评论更新。
假设您不使用上述方法,ListBox将填充Contact
对象(而不是我们的CustomContact
对象)。 因此,我们将所选项转换为Contact
对象,并使用重载的构造函数接收Contact
对象以创建我们想要的CustomContact
对象。
private void ContactResultsData_SelectionChanged(object sender, SelectionChangedEventArgs e) { Contact contact = ContactResultsData.SelectedItem as Contact; if (contact != null) { CustomContact customContact = new CustomContact(contact); } }
- 从C#引用64位dll时应用程序退出(无exception)
- 如何将MEF导入和导出信息保存到磁盘
- 2015年安装Visual Studio Installer项目后,VS 2015中的Visual Studio 2012安装程序项目“未安装应用程序”
- 如何从某个网页复制所有文本并将其保存到记事本C#
- 如何设计在Windows Vista / 7上以管理员身份运行的自动启动应用程序?
- EF4.1 POCO:我为什么要使用ICollection
- WebAPI DataMember通过application / x-www-form-urlencoded进行de / serial化时不使用的名称
- 从C#代码配置Web服务endPoint和契约?
- IIS 7.x,添加启用HTTPS的站点:SiteCollection.Add(string,string,string,byte )重载