2015-12-30 68 views
0

我有一个组合框,它从API获取值。我想获取该组合框中所选项目的ID,因为下一个视图中的数据根据​​此处选定的值进行更改。如何获取组合框中选定项目的ID。 C#Metro App

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

用户将能够选择在组合框中的主题,所以我想它返回的主题,所以我可以根据被摄物体动态加载的单位。

有人请帮我做.. 任何形式的帮助表示赞赏......

回答

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事件,您可以从下拉框赶上你选择的项目,只要你选择一个新项目,在这种情况下触发你可以捕捉对象并传递ID。

修改后您的组合框就会像下面的XAML

加入 SelectionChanged财产后
<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

顺便说一句,我认为,当你绑定项目源,我认为它是从这里的主题列表。 ItemsSource =“{Binding Source = {StaticResource cvsSubjects}}”,你只是将名字绑定到代码后面的文本上,这个方法只有在你绑定'Subject'对象的List时才有效。您可以将它们绑定为列表,如果名称是唯一的,则它会以其他方式工作,您需要有一种方法来单独检查其ID。 –

相关问题