Я использую следующий код, чтобы позволить пользователю выбирать контакты:
ContactPicker ContactPicker = new ContactPicker();
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
var Contacts = await ContactPicker.PickContactsAsync();
if (Contacts.Count > 0)
{
foreach (Contact contact in Contacts)
{
string telephone = string.Empty;
string email = string.Empty;
if (contact.Phones.Count > 0)
{
telephone = contact.Phones[0].Number;
}
if (contact.Emails.Count > 0)
{
email = contact.Emails[0].Address;
}
PartyPerson person = new PartyPerson(DateTime.Now.ToString("PP_yyMMdd_hhmmss_ffff"), true, contact.DisplayName, 0, 0, 0, email, telephone);
AddPartyPerson(person);
}
}
ContactPicker = null;
Однако я получаю только номер телефона, объект «контакт» не содержит никаких адресов электронной почты, хотя они присутствуют в контактной информации. Один из вариантов - переключить:
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
с
ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);
Но тогда я не получаю номер телефона... Я хочу иметь возможность получить всю информацию за один выбор.
Есть ли способ выбрать обе информации с помощью одного выбора? (Я также пытался добавить более одной записи в DesiredFieldsWithContactFieldType, но потом получаю исключение...)
С наилучшими пожеланиями,
Керан
РЕДАКТИРОВАТЬ 07.08.2015: Поскольку «ContactPicker.DesiredFieldsWithContactFieldType» может принимать только один тип «ContactFieldType», способ, которым я работал, заключался в том, чтобы сначала разрешить пользователю получать контакты с помощью ContactFieldType.PhoneNumber, а затем я программно получаю адреса электронной почты выбранные контакты.
С точки зрения пользователя, это не будет проблемой, так как все будет правильно отображаться в ContactPicker.PickContactsAsync, нам просто нужно получить недостающую информацию об электронной почте вручную в коде программной части, что легко, поскольку мы знаем, какие контакты были выбранный пользователем.