Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在windows phone 8中选择联系人_C#_Wpf_Xaml_Windows Phone 8 - Fatal编程技术网

C# 在windows phone 8中选择联系人

C# 在windows phone 8中选择联系人,c#,wpf,xaml,windows-phone-8,C#,Wpf,Xaml,Windows Phone 8,我正在尝试将基本联系人列表添加到我的应用程序中 到目前为止,该应用程序查询联系人商店并在列表中显示所有联系人 我需要的是一个数据结构,其中包含用户从列表中选择的每个联系人的姓名和号码 我很想看看你的想法。我相信这将是我错过的简单的事情,但我已经尝试了太多,我现在非常困惑 下面是相关的代码片段和附带的XAML。非常感谢您抽出时间。 C#更新 名称空间appNamespace { 公共部分类联系人:PhoneApplicationPage { 公共类客户联系人 { 公共字符串名称{get;set;}

我正在尝试将基本联系人列表添加到我的应用程序中

到目前为止,该应用程序查询联系人商店并在列表中显示所有联系人

我需要的是一个数据结构,其中包含用户从列表中选择的每个联系人的姓名和号码

我很想看看你的想法。我相信这将是我错过的简单的事情,但我已经尝试了太多,我现在非常困惑

下面是相关的代码片段和附带的XAML。非常感谢您抽出时间。 C#更新

名称空间appNamespace
{
公共部分类联系人:PhoneApplicationPage
{
公共类客户联系人
{
公共字符串名称{get;set;}
公共字符串编号{get;set;}
公众联络人()
{
}
//接收联系人对象并提取我们需要的两个字段的CTOR(可以添加更多字段)
公共客户联系人(联系人)
{
Name=contact.DisplayName;
var number=contact.PhoneNumbers.FirstOrDefault();
如果(数字!=null)
Number=Number.PhoneNumber;
其他的
数字=”;
}
}
公众联络()
{
初始化组件();
}
私人void showContacts(对象发送者、路由目标)
{
Contacts cons=新联系人();
//标识异步搜索完成后运行的方法。
cons.SearchCompleted+=新事件处理程序(联系人\u SearchCompleted);
//启动异步搜索。
cons.SearchAsync(String.Empty,FilterKind.None,“Contacts Test#1”);
}
无效联系人搜索已完成(对象发件人、联系人搜索目标e)
{
//对结果做点什么。
Show(例如Results.Count().ToString());
尝试
{
//将结果绑定到用户界面。
ContactResultsData.DataContext=e.结果;
}
捕获(系统异常)
{
//没有结果
}
if(ContactResultsData.Items.Any())
{
ContactResultsLabel.Text=“结果”;
}
其他的
{
ContactResultsLabel.Text=“无结果”;
}
}
public void saveContacts(对象发送者、路由目标)
{
List-listOfContacts=新列表();
listOfContacts=e.Results.Select(x=>newcustomcontact()
{
Number=x.PhoneNumbers.FirstOrDefault()!=null?x.PhoneNumbers.FirstOrDefault()。PhoneNumber:“”,
Name=x.DisplayName
}).ToList();
}
private void ContactResultsData\u SelectionChanged(对象发送者,SelectionChangedEventArgs e)
{
Contact Contact=ContactResultsData。选择EdItem作为联系人;
如果(联系人!=null)
{
CustomContact CustomContact=新的CustomContact(联系人);
}
}
}
}
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 = "";
    }
}
List<CustomContact> listOfContacts = new List<CustomContact>();
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;
然后遍历结果并将其添加到类中

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 = "";
    }
}
List<CustomContact> listOfContacts = new List<CustomContact>();
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;
根据评论进行更新。

假设您不使用上述方法,列表框将填充
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);
    }
}

假设你想要比返回的
Contact
类更小的东西,你就不能用你想要的字段(例如姓名、号码等)创建一个自定义Contact类吗?啊,好的,这是一个有趣的想法。但是,如何实际获取与所选名称关联的数字?这是让我头疼的部分!非常感谢。过一会儿我会试试这个,但看起来很棒。谢谢不客气:)如果你有什么不明白的地方,请告诉我。试试这个-效果很好,谢谢。除了一件事——这似乎将联系人异步查询的结果添加到自定义类中……而不是listBox XAML元素中的选定项。如何存储与所选联系人关联的电话号码??谢谢你迄今为止的帮助。再说一次,我可能忽略了一些简单的事情,但我花了一整天的时间在这个问题上,却一无所获!啊,我误解了,我以为你想绑定到
CustomContact
对象。检查我更新的答案(注意,这个类也已经用一个新的构造函数更新了)。非常感谢。我真的很感谢你在这方面的帮助,然而,我真的很难处理这个问题。请容忍我,到目前为止你帮了我很大的忙!!请查看我的更新代码以查看我迄今为止所做的工作。我不知道哪里出错了,但在saveContacts方法中,我得到的错误“Results”在“e”中找不到。再次感谢你。
private void ContactResultsData_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Contact contact = ContactResultsData.SelectedItem as Contact;
    if (contact != null)
    {
        CustomContact customContact = new CustomContact(contact);
    }
}