2013-05-29 89 views
0

我正在使用ContactPicker类将Windows 8人员应用程序集成到我的应用程序中。 点击按钮时,我加载人员应用程序。用户选择一些朋友,我想在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); 
      } 
     } 
    } 
+0

你在哪里设置ContactEmails中的值?用户是否进入这个地方? –

+0

电子邮件地址来自Windows 8 People应用程序。用户不能进入这个,他只能选择他想看哪个朋友的细节。 – user1951083

+0

也许我错过了一些东西。代码需要访问该电子邮件列表并将ContactEmails设置为该地址。你在做什么? –

回答

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); 
    } 
+0

我认为问题出在System.Collections.Generic.List'1 [System.String]。这表明我试图显示一个列表对象而不是列表中的值。 – user1951083

+0

确实如此,但是如果我们没有看到将ContactEmails设置为电子邮件值的位置,则很难判断。 –

+0

我只是想到了我的答案,是的,那是行不通的。我添加了一个新的答案,可能是问题 –

0

您不能将TextBlock设置为列表。您需要将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> 
+0

不幸的是,它不起作用,除非我做错了。 – user1951083

+0

确保您实现INotifyPropertyChanged,它将被要求能够正确绑定到您的ContactEmailString –

相关问题