【问题标题】:How to get an ID of a selected item in a combobox. C# Metro App如何获取组合框中所选项目的 ID。 C# Metro 应用程序
【发布时间】:2015-12-30 10:14:59
【问题描述】:

我有一个从 API 获取值的组合框。我想获取该组合框中所选项目的 ID,因为我下一个视图中的数据会根据此处选择的值而变化。

我的组合框。

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

用户将能够在组合框中选择主题,因此我希望它返回主题,以便我可以根据主题动态加载单元。

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

【问题讨论】:

    标签: c# data-binding windows-store-apps microsoft-metro


    【解决方案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;}
    }
    

    【讨论】:

      【解决方案2】:

      Combobox 有一个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;
      }
      

      【讨论】:

      • 我在发布后立即编辑了我的代码,我添加了错误的属性,正确的是 SelectionChanged="ComboBox_SelectionChanged" ,可以检查一下吗?
      • 顺便说一句,我假设当您绑定项目源时,我认为它是来自此处的主题列表。 ItemsSource="{Binding Source={StaticResource cvsSubjects}}",您只是将名称绑定为代码后面的文本,此方法仅在您绑定“主题”对象列表时有效。您可以将它们绑定为列表,如果名称是唯一的,它会以其他方式工作,您需要一种方法来单独检查它们的 ID。
      • cmbSubjects.Items.Add(item.name);这就是我添加项目的方式。 cvsSubjects.source = data.result;用该类的路径填充我的组合框
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2017-04-28
      相关资源
      最近更新 更多