2015-12-30 3 views
0

У меня есть поле со списком, в котором получает значения из API. Я хочу получить идентификатор выбранного элемента в этом поле со списком, поскольку данные в моем следующем представлении меняются в зависимости от значения, выбранного здесь.Как получить идентификатор выбранного элемента в поле со списком. C# Metro App

Мой 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"/> 

Вот как я его заполняю.

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(); 
      } 

     } 

Мои Классы:

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; } 
    } 

Пользователь сможет выбрать Subject в поле со списком, так что я хочу, чтобы вернуть Subject, так что я могу загрузить единицы динамически в зависимости от объекта.

Кто-то пожалуйста, помогите мне сделать это .. Любой вид помощи оценен ......

ответ

1

Вы должны изменить свой код немного для этого.

<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> 

и не установлены ItemsSource следующим образом:

cmbSubjects.ItemsSource=data.Result; 

, а затем в SelectionChanged случае

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

выпадающий имеет SelectionChanged событие, вы можете поймать выбранный пункт из выпадающего списка всякий раз, когда вы выбираете новый пункт , в этом случае триггер вы можете поймать объект и передать идентификатор.

После модификации вашей выпадающий будет, как показано ниже, после добавления SelectionChanged свойства в 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"/> 

код позади будет

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

нет это trows нулевого исключения .... – kirushan

+0

Я отредактировал мой код сразу после моего поста , Я добавил неправильное свойство правильно, будет SelectionChanged = "ComboBox_SelectionChanged", можно ли это проверить? –

+0

Btw Я предположил, что когда вы связываете источник Items, я подумал, что это список Subject отсюда. ItemsSource = "{Binding Source = {StaticResource cvsSubjects}}", вы просто связываете имя как текст позади кода, этот метод будет работать только в том случае, если вы связываете объект «Объект». Вы можете связать их как список, и он будет работать другим, если имена уникальны, вам нужен метод для проверки их идентификаторов отдельно. –