2013-08-22 59 views
0

編輯名單:新的問題 - 爲清楚起見&新代碼中看到Selecting contacts in windows phone 8檢索聯繫人號碼C#WP8

誰downvoted,非常感謝。非常有建設性。

感謝MSDN和這裏的支持,得到了以下代碼工作,它填充聯繫人列表並允許用戶在將它們保存到List對象之前選擇多個聯繫人。

但是,我現在想知道如何檢索與檢索到的每個名稱關聯的聯繫號碼。我試過後續的搜索,但我覺得我做錯了,每次只是打破了代碼。

任何幫助將不勝感激,謝謝。

 private void showContacts(object sender, RoutedEventArgs e) 
     { 
      Contacts cons = new Contacts(); 

      //Identify the method that runs after the asynchronous search completes. 
      cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted); 

      //Start the asynchronous search. 
      cons.SearchAsync(String.Empty, FilterKind.None, "Contacts Test #1"); 
     } 

     void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) 
     { 
      //Do something with the results. 
      MessageBox.Show(e.Results.Count().ToString()); 
      try 
      { 
       //Bind the results to the user interface. 
       ContactResultsData.DataContext = e.Results; 
      } 
      catch (System.Exception) 
      { 
       //No results 
      } 

      if (ContactResultsData.Items.Any()) 
      { 
       ContactResultsLabel.Text = "results"; 
      } 
      else 
      { 
       ContactResultsLabel.Text = "no results"; 
      } 
     } 

     public void saveContacts(object sender, RoutedEventArgs e) 
     { 
      String strItem; 

      List<string> listOfNames = new List<string>(); 

      foreach (Object selecteditem in ContactResultsData.SelectedItems) 
      { 
       //MessageBox.Show(selecteditem.ToString()); 
       strItem = selecteditem as String; 
       ContactResultsLabel.Text = strItem; 

       listOfNames.Add(strItem); 

       //System.Diagnostics.Debug.WriteLine(strItem); 
       //MessageBox.Show("Saving " + strItem); 
      } 
     } 
    } 
} 
+0

請表現出足夠的簡潔的代碼來簡化你的問題 –

+0

我已刪除了一些多餘的代碼。留下什麼1.)搜索所有聯繫人2.)將結果數據綁定到XAML UI 3.)創建名稱列表 希望這有助於。我現在嘗試獲取與每個聯繫人相關的號碼。你能幫忙嗎? 謝謝:) – anthonyhumphreys

+0

國王,如果你要評論,請建設性的。我已盡力將代碼降至最低限度。我儘可能清楚地問了我的問題。 – anthonyhumphreys

回答

2

使用VAR而不是對象

我理解你的要求,但我不明白你的代碼,反正

我僅舉像如果ContactResultsData.SelectedItems一直數據庫值的鍵,然後再嘗試這種方式

foreach (var selecteditem in ContactResultsData.SelectedItems) 
      { 
       //MessageBox.Show(selecteditem.ToString()); 

       ContactResultsLabel.Text = selecteditem.Name;//The Name is ContactResultsData.SelectedItems return Column Field name 
       ContactNumberResult.Text = selecteditem.Number;//The Name is ContactResultsData.SelectedItems return Column Field name 

       listOfNames.Add(strItem); 

       //System.Diagnostics.Debug.WriteLine(strItem); 
       //MessageBox.Show("Saving " + strItem); 
      } 
+0

謝謝你。但是,這會返回錯誤'對象不包含名稱的定義',同樣適用於數字。 我所要做的就是在列表中顯示聯繫人,顯示姓名,然後存儲每個選定聯繫人的姓名和號碼。 – anthonyhumphreys

+0

你好,那就像一個關鍵,那名字和數字的意思,你的列名 –

+0

對不起拉梅什,我必須缺少的東西。我無法弄清楚這兩行怎麼辦?所選項目的唯一值似乎是聯繫人姓名,如列表框中所示。 – anthonyhumphreys

0

下面這個例子是對Group Contacts應用程序實現的:

XAML:

<HyperlinkButton x:Name="CompanyButton" Content="{Binding ElementName=grid, Path=DataContext.SelectedContact.JobInfo, Converter={StaticResource WorkToTextConverter}}" Visibility="{Binding ElementName=grid, Path=DataContext.SelectedContact.JobInfo, Converter={StaticResource WorkToVisibilityConverter}}" IsEnabled="{Binding ElementName=grid, Path=DataContext.SelectedContact.Phones, Converter={StaticResource WorkPhoneExistsConverter}}"/> 
<HyperlinkButton x:Name="MobileButton" Content="Mobile" Visibility="{Binding ElementName=grid, Path=DataContext.SelectedContact.Phones, Converter={StaticResource MobileToVisibilityConverter}}"/> 
<HyperlinkButton x:Name="MessageButton" Content="Message" Visibility="{Binding ElementName=grid, Path=DataContext.SelectedContact.Phones, Converter={StaticResource MobileToVisibilityConverter}}"/> 
<HyperlinkButton x:Name="EmailButton" Content="Email"  Visibility="{Binding ElementName=grid, Path=DataContext.SelectedContact.Emails, Converter={StaticResource EmailsToVisibilityConverter}}" /> 

。 。

代碼:

private void Call(object e) 
{ 
    ContactPhone phone = null; 

    var kind = e as string; 

    switch (kind) 
    { 
     case "Mobile": 
      { 
       phone = SelectedContact.Phones.Where(p => p.Kind == ContactPhoneKind.Mobile).FirstOrDefault(); 
       break; 
      } 

     case "Work": 
      { 
       phone = SelectedContact.Phones.Where(p => p.Kind == ContactPhoneKind.Work).FirstOrDefault(); 
       break; 
      } 
}