2012-03-06 3 views
0

Fondamentalement, j'essaie de tirer les contacts du téléphone et de les montrer dans le contrôle Listpicker pour une fonctionnalité dans mon application. J'ai deux Listpickers, un pour le nom de la liste de contacts et l'autre montrant la liste des numéros de téléphone pour le contact choisi.Impossible d'afficher l'élément sélectionné dans le contrôle Listpicker Wp7

Voici mon code:

//Declarations 

ContactsSearchEventArgs e1; 
String SelectedName; 
String SelectedNumber; 
List<string> contacts = new List<string>(); 
List<string> phnum = new List<string>(); 


public AddressBook() // Constructor 
    { 
     InitializeComponent(); 
     Contacts contacts = new Contacts(); 
     contacts.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(contacts_SearchCompleted); 
     contacts.SearchAsync(string.Empty,FilterKind.None,null);    
    } 

void contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) 
    {   
     e1 = e; 

      foreach (var result in e.Results) 
      {   

       if (result.PhoneNumbers.Count() != 0) 
       { 

        contacts.Add(result.DisplayName.ToString()); 
       }      

      } 

     Namelist.ItemsSource = contacts; 

    } 

private void Namelist_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     SelectedName = (sender as ListPicker).SelectedItem.ToString(); 
     phnum.Clear();    
     foreach (var result in e1.Results) 
     { 
      if (SelectedName == result.DisplayName) 
      { 

       phnum.Add(result.PhoneNumbers.FirstOrDefault().ToString()); 

      } 
     } 

     Numbers.ItemsSource = phnum;    
    } 

private void Numbers_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 

     SelectedNumber = (sender as ListPicker).SelectedItem.ToString(); 

    } 

Am en mesure de remplir le phoneNumbers pour avec liste de numéros le nom choisi à l'arrière-plan Listpicker, mais le nombre n'apparaît pas à l'avant. Je pense que l'événement Numbers_SelectionChanged() est appelé seulement une fois quand la page se charge et ne le voit pas déclencher quand je change la liste de contact. Quelqu'un a-t-il une idée de ce qui ne va pas?

Répondre

1

Si vous changez List<string> Pour ObservableCollection<string> cela devrait fonctionner.

Aussi, il suffit de définir une seule fois ItemSource, dans Xaml ou dans le constructeur. Mais vous pouvez rencontrer un autre problème avec le Toolkit Novembre 2011 et ListPicker.

Voir plus in thread.

+0

Merci pour la réponse. J'ai essayé avec ObservableCollection aussi ... mais c'est toujours pareil. Aussi je ne pense pas que cela soit avec le problème Novp 2011 Listpicker parce que son fonctionnement bien dans d'autres pages. – Sri

+0

Cela ne fonctionne pas car il ne crée pas de liaison entre ItemsSource et la collection. – AlexDrenea

1
private void Namelist_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    SelectedName = (sender as ListPicker).SelectedItem.ToString(); 
    phnum = new List<string>(); // Changed instead of phnum.Clear()    
    foreach (var result in e1.Results) 
    { 
     if (SelectedName == result.DisplayName) 
     { 

      phnum.Add(result.PhoneNumbers.FirstOrDefault().ToString()); 

     } 
    } 

    Numbers.ItemsSource = phnum;    
} 

Cela fonctionne !! Pendant le débogage, j'ai trouvé son phnum.Clear() donnant un problème. J'ai donc pensé créer une nouvelle instance de phnum list pour le contact sélectionné.

Questions connexes