2015-12-30 85 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。 –

相關問題