联系人Picker获取电子邮件地址

时间:2013-05-29 14:59:03

标签: c# windows-8 windows-runtime peoplepicker

我正在使用ContactPicker类在我的应用程序中集成Windows 8 People App。 单击按钮时,我加载了People App。用户选择一些朋友,我想在ListView中显示他们的姓名,图像和电子邮件地址。

显示名称和图像没有问题。而不是显示它显示的电子邮件地址: System.Collections.Generic.List`1 [System.String] 任何解决方案??

    IReadOnlyList<GetContactDetails> ConDetails;
    public IReadOnlyList<GetContactDetails> ContactDetails
    {
        get { return ConDetails; }
        set { ConDetails = value; }
    }

    List<GetContactDetails> Contact;
    public List<GetContactDetails> SetContacts
    {
        get { return Contact; }
        set { Contact = value; }
    }

    private async void Contacts_Click(object sender, RoutedEventArgs e)
    {
        SetContacts = new List<App1.GetContactDetails>();
        var contactSelector = new Windows.ApplicationModel.Contacts.ContactPicker();
        contactSelector.CommitButtonText = "Pick contact";

        var SelectedContact = await contactSelector.PickMultipleContactsAsync();
        foreach (var item in SelectedContact)
        {
            SetContacts.Add(new GetContactDetails(item));
        }
        ContactList.ItemsSource = SetContacts;
    }

XAML:

<ListView x:Name="ContactList" ItemTemplate="{StaticResource contactTemplate}" HorizontalAlignment="Left" Height="271" VerticalAlignment="Top" Width="585"/>


    <DataTemplate x:Key="contactTemplate">
        <Grid Width="400" Height="200" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50"></ColumnDefinition>
                <ColumnDefinition Width="350"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="75"></RowDefinition>
                <RowDefinition Height="75"></RowDefinition>
                <RowDefinition Height="75"></RowDefinition>
            </Grid.RowDefinitions>
            <TextBlock Grid.Column="0" Grid.Row="0" Text="Name" FontSize="20" FontWeight="Bold"></TextBlock>
            <TextBlock Grid.Column="1"  Grid.Row="0"  Text="{Binding ContactName}" FontWeight="Bold"></TextBlock>
            <TextBlock Grid.Column="0" Grid.Row="1" Text="Mail" FontSize="20" FontWeight="Bold"></TextBlock>
            <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding ContactEmails}"  FontSize="10" FontWeight="Bold"></TextBlock>
<!--<Image Height="100" Width="100" Grid.Column="1" Grid.Row="1" Source="{Binding ContactImage}" HorizontalAlignment="Left" VerticalAlignment="Center"></Image>-->


        </Grid>
    </DataTemplate>

GetContactDetails类:

public class GetContactDetails
{
        public string ContactName { get; private set; }
        public BitmapImage ContactImage { get; private set; }
        public Visibility CanShow { get; set; }

        public List<string> PhoneNumbers { get; set; }
        public List<string> ContactEmails { get; set; }

        public GetContactDetails(ContactInformation c)
        {
            PhoneNumbers = new List<string>();
            ContactEmails = new List<string>();

            CanShow = Visibility.Visible;
            ContactName = c.Name;
            if (c.PhoneNumbers.Count > 0)
            {
                foreach (var item in c.PhoneNumbers)
                {
                    PhoneNumbers.Add(item.Value);
                }
            }
            else
            {
                CanShow = Visibility.Collapsed;
            }
            GetContactImage(c);
        }

        async void GetContactImage(ContactInformation Img)
        {
            var imgStream = await Img.GetThumbnailAsync();
            ContactImage = new BitmapImage();
            if (imgStream != null && imgStream.Size > 0)
            {
                ContactImage.SetSource(imgStream);
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

您的代码似乎没有向ContactEmails添加信息。你不需要这样的东西吗?

   public List<string> PhoneNumbers { get; set; }
    public List<string> ContactEmails { get; set; }

    public GetContactDetails(ContactInformation c)
    {
        PhoneNumbers = new List<string>();
        ContactEmails = new List<string>();

        CanShow = Visibility.Visible;
        ContactName = c.Name;
        if (c.PhoneNumbers.Count > 0)
        {
            foreach (var item in c.PhoneNumbers)
            {
                PhoneNumbers.Add(item.Value);
            }
        }
        else
        {
            CanShow = Visibility.Collapsed;
        }

        /// Don't you need the below code somewhere?//////
        if (c.Emails.Count > 0)
        {
            foreach (var item in c.Emails)
            {
                ContactEmails .Add(item.Value);
            }
        }

///////////////////////////////////////////////////////////////
        else
        {
            CanShow = Visibility.Collapsed;
        }
        GetContactImage(c);
    }

答案 1 :(得分:0)

您无法将TextBlock设置为List。您需要将ContactEmails解析为单独的字符串。也许是这样的:

创建一个名为ContactEmailString

的属性
    string _contactEmailString;
    public string ContactEmailsString 
    {
      get{
          return _contactEmailString;
         }
      set
      {
         value=_contactEmailString;
         NotifyPropertyChanged("ContactEmailString");
      }
   }

然后在设置联系信息的函数中执行以下操作:

foreach(var item in ContactEmails)
{
   ContactEmailString+=item+";";
}

然后在你的xaml绑定到ContactEmailString而不是ContactEmail。

<TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding ContactEmailString}"  FontSize="10" FontWeight="Bold"></TextBlock>
相关问题