2015-12-30 1 views
0

J'ai une liste déroulante où l'on obtient les valeurs d'une API. Je veux obtenir l'ID de l'élément sélectionné dans cette liste déroulante car les données de ma vue suivante changent en fonction de la valeur sélectionnée ici.Comment obtenir un ID d'un élément sélectionné dans une liste déroulante. C# Metro App

Mon Combobox.

<ComboBox x:Name="cmbSubjects" HorizontalAlignment="Right" Background="#FFE5DBE8" Width="141" SelectedItem="Maths" Margin="0,217,957,247" ItemsSource="{Binding Source={StaticResource cvsSubjects}}" PlaceholderText="Select"/> 

Voici comment je le peupler.

private async void getSubjects() 
     { 
      try 
      { 
       string subjects = baseAddress + "subjects"; 
       var cont = await httpClient.GetStringAsync(new Uri(subjects)); 
       subjectHelper data = JsonConvert.DeserializeObject<subjectHelper>(cont); 

       foreach (var item in data.result) 
       { 
        cmbSubjects.Items.Add(item.name); 
       } 

      } 
      catch (Exception ex) 
      { 
       MessageDialog messageDialog = new MessageDialog(ex.Message); 
       messageDialog.ShowAsync(); 
      } 

     } 

Mes classes:

public class Subject 
    { 
     public int id { get; set; } 
     public string name { get; set; } 
     public string code { get; set; } 
     public string description { get; set; } 
     public curriculum curriculam { get; set; } 
    } 

    class subjectHelper 
    { 
     public List<Subject> result { get; set; } 
    } 

    public class unit 
    { 
     public int id { get; set; } 
     public string name { get; set; } 
     public string code { get; set; } 
     public string description { get; set; } 
     public string image { get; set; } 
     public int teachingHours { get; set; } 
     public int isMandotory { get; set; } 
     public Subject subject { get; set; } 
    } 

    class unitHelper 
    { 
     public List<unit> result { get; set; } 
    } 

L'utilisateur sera en mesure de sélectionner le sujet dans la zone de liste déroulante donc je veux qu'il revienne le sujet donc je peux charger les unités dynamiquement en fonction du sujet.

Quelqu'un s'il vous plaît aidez-moi faire ça .. Toute aide est appréciée ......

Répondre

1

Vous devez changer votre code un peu pour cela.

<ComboBox x:Name="cmbSubjects" HorizontalAlignment="Right" Background="#FFE5DBE8" Width="141" SelectedItem="Maths" Margin="0,217,957,247" PlaceholderText="Select">   <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding name}"/> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
</ComboBox> 

et définir ItemsSource comme suit:

cmbSubjects.ItemsSource=data.Result; 

puis en cas SelectionChanged

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Subject selectedSubject = cmbSubjects.SelectedItem as Subject; 
if(selectedSubject!=null){ 
    int selectedSubID = selectedSubject.ID;} 
} 
0

Combobox a un événement SelectionChanged, vous pouvez prendre votre élément sélectionné de votre combobox chaque fois que vous sélectionnez un nouvel élément , dans ce cas, vous pouvez déclencher l'objet et passer l'identifiant.

Après modification de votre combobox sera comme ci-dessous après avoir ajouté SelectionChanged propriété en XAML

<ComboBox x:Name="cmbSubjects" HorizontalAlignment="Right" Background="#FFE5DBE8" Width="141" SelectedItem="Maths" Margin="0,217,957,247" ItemsSource="{Binding Source={StaticResource cvsSubjects}}" PlaceholderText="Select" SelectionChanged="ComboBox_SelectionChanged"/> 

votre code derrière être

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Subject selectedSubject = cmbSubjects.SelectedItem as Subject; 
    int selectedSubID = selectedSubject.ID; 
} 
+0

pas elle trows une exception nulle .... Je – kirushan

+0

édité mon code juste après mon post , J'ai ajouté une mauvaise propriété correcte sera SelectionChanged = "ComboBox_SelectionChanged", est-il possible de vérifier cela? –

+0

Btw Je supposais que lorsque vous liez la source des éléments, je pensais que c'est la liste de Sujet d'ici. ItemsSource = "{Source de liaison = {StaticResource cvsSubjects}}", vous ne faites que lier le nom en tant que texte au code derrière, cette méthode ne fonctionnera que si vous liez la liste de l'objet 'Sujet'. Vous pouvez les lier en tant que liste et cela fonctionnera autrement si les noms sont uniques vous avez besoin d'une méthode pour vérifier leurs identifiants séparément. –