C# 如何从UWP中的联系人获取生日?

C# 如何从UWP中的联系人获取生日?,c#,.net,uwp,windows-10-universal,uwp-xaml,C#,.net,Uwp,Windows 10 Universal,Uwp Xaml,我想创建一个简单的应用程序来获取联系人的出生日期。下面我实现了一些代码,但我不知道实际发生了什么 var contactPicker = new ContactPicker(); contactPicker.CommitButtonText = "Select"; contactPicker.SelectionMode = ContactSelectionMode.Fields; contactPicker.DesiredFieldsWithContactFieldTyp

我想创建一个简单的应用程序来获取联系人的出生日期。下面我实现了一些代码,但我不知道实际发生了什么

var contactPicker = new ContactPicker();
    contactPicker.CommitButtonText = "Select";
    contactPicker.SelectionMode = ContactSelectionMode.Fields;
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);

    var contacts = await contactPicker.PickContactsAsync();
    if (contacts != null && contacts.Count > 0)
    {
        try
        {
            foreach (Contact contact in contacts)
            {
                var birthday = contact.ImportantDates.First(d => d.Kind == 
                      ContactDateKind.Birthday);
                textBlock.Text = birthday.Day.ToString();

            }
        }
        catch (Exception w)
        {
            textBlock.Text = w.ToString();
        }                
    }
在上面的代码中,我成功地获得了电子邮件和姓名,但我无法获得生日,因为没有“contacts.birthday”之类的方法,谢谢

我发现的例外情况是:

'System.InvalidOperationException' in  System.Linq.dll 
System.InvalidOperationException: Sequence contains no matching element at 
System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2
predicate) at ContactApiSample.MainPage.<button_Click>d__1.MoveNext()
System.Linq.dll中的“System.InvalidOperationException” System.InvalidOperationException:序列在处不包含匹配元素 System.Linq.Enumerable.First[TSource](IEnumerable`1源,Func`2 谓词)在ContactApiSample.MainPage.d_u1.MoveNext()处 似乎使用手机无法获取所有联系人信息。
IList重要日期的计数始终为0

我刚刚为您的场景找到了一个解决方法,如果您坚持在此处使用
ContactPicker
,您可以获取联系人的ID,并使用此ID查找相同的联系人,例如:

if (contacts != null && contacts.Count > 0)
{
    try
    {
        ContactStore allAccessStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);

        foreach (Contact contact in contacts)
        {
            var storecontact = await allAccessStore.GetContactAsync(contact.Id);
            var birthday = storecontact.ImportantDates.First(d => d.Kind ==
          ContactDateKind.Birthday);
        }
    }
    catch (Exception w)
    {
        //textBlock.Text = w.ToString();
    }
}
似乎使用手机无法获得所有的联系信息。
IList重要日期的计数始终为0

我刚刚为您的场景找到了一个解决方法,如果您坚持在此处使用
ContactPicker
,您可以获取联系人的ID,并使用此ID查找相同的联系人,例如:

if (contacts != null && contacts.Count > 0)
{
    try
    {
        ContactStore allAccessStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);

        foreach (Contact contact in contacts)
        {
            var storecontact = await allAccessStore.GetContactAsync(contact.Id);
            var birthday = storecontact.ImportantDates.First(d => d.Kind ==
          ContactDateKind.Birthday);
        }
    }
    catch (Exception w)
    {
        //textBlock.Text = w.ToString();
    }
}

错误信息显示出了问题所在。“序列不包含匹配的元素。”您要求输入第一个
ContactDate
生日,但如果根本没有生日该怎么办?没有,但我已创建了一个带有生日的联系人,我正在尝试使用该联系人。虽然我没有过生日。但幸运的是我找到了路。只需查看@GraceFeng提供的以下答案,顺便说一句,感谢您的回复。但您没有要求返回重要日期。您没有说
contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.ImportantDate)我不想要所有重要日期,但我只想要来自重要日期枚举的生日。
重要日期
是您可以请求的单个字段。该字段恰好包含多个重要日期。目前没有办法只要求一个特定的重要日期。(请注意,解决方法会获取所有重要日期。)错误消息会显示出问题所在。“序列不包含匹配的元素。”您要求输入第一个
ContactDate
生日,但如果根本没有生日该怎么办?没有,但我已创建了一个带有生日的联系人,我正在尝试使用该联系人。虽然我没有过生日。但幸运的是我找到了路。只需查看@GraceFeng提供的以下答案,顺便说一句,感谢您的回复。但您没有要求返回重要日期。您没有说
contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.ImportantDate)我不想要所有重要日期,但我只想要来自重要日期枚举的生日。
重要日期
是您可以请求的单个字段。该字段恰好包含多个重要日期。目前没有办法只要求一个特定的重要日期。(请注意,解决方案包含所有重要日期。)感谢您的回复@GraceFeng,我已经尝试了您的解决方案,并获得了预期的结果。非常感谢。谢谢你的回复@GraceFeng,我已经尝试了你的工作,我得到了想要的结果。非常感谢。你让我开心。