如何获取相应的ComboBox标记

时间:2015-06-16 10:01:14

标签: c# wpf combobox

我正试图以这种方式将标记与ComboBox的值相关联:

var league = ((ComboBoxItem)this.League.SelectedValue).Tag.ToString();
Console.WriteLine(league);

编译器显示Invalid Cast Exception

我只希望用户获取所选值的关联标签,特别是:

(组合框值和标签)

- 意大利(项目) - 10(标签)
- 法国(项目) - 12(标签)

如果用户选择意大利,则在代码中我必须获得"10"。但我不能这样做,我做错了什么?

更新(填充组合):

List<RootObject> obj = JsonConvert.DeserializeObject<List<RootObject>>(responseText);

        foreach (var item in obj)
        {
            foreach (var code in nation_code)
            {
                if (code.Equals(item.League))
                {
                    League.Items.Add(item.Caption);
                    //link for each team
                    League.Tag = item.Links.Teams.href;
                }
            }
        }

2 个答案:

答案 0 :(得分:1)

如果您看到标签是设置组合框本身而不是其单个项目。

您可以构建字典并将其用作组合框的数据源。使用字典键和值属性

指定组合框的值和显示成员

尝试按如下方式修改组合填充逻辑 -

        List<RootObject> obj = JsonConvert.DeserializeObject<List<RootObject>>(responseText);
        Dictionary<string, string> comboSource = new Dictionary<string, string>();

        foreach (var item in obj)
        {
            foreach (var code in nation_code)
            {
                if (code.Equals(item.League))
                {
                    comboSource.Add(item.Caption, item.Links.Teams.href);

                }
            }
        }

        League.ValueMember = "Value";
        League.DisplayMember = "Key";
        League.DataSource = comboSource;

然后可以使用selectedText和selectedvalue属性获取所需的值。

     League.SelectedText; //Return the "item.Caption"
     League.SelectedValue; //Return the "item.Links.Teams.href" 
  

对于WPF,我们需要使用不同的属性即。 ItemsSource,   绑定组合时DisplayMemberPathSelectedValuePath   框。以上解决方案适用于胜利形式。

答案 1 :(得分:0)

您可以向ComboBox添加任何类型的对象,它不需要是字符串,只需要覆盖.ToString()。

您可以定义一个类:

class League {
  public string Country { get; set; }
  public int Id { get; set; }

  public override string ToString() {
       return Country;
  }
}

然后只需将这些对象添加到ComboBox:

comboBox.Items.Add(new League { Country = "France", Id = 10 });

然后,您可以将comboBox的SelectedItem强制转换回您的类:

var selectedLeague = (League)comboBox.SelectedItem;
//access selectedLeague.Country;
//access selectedLeague.Id;