2013-05-29 90 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 –

相關問題