我正试图以这种方式将标记与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;
}
}
}
答案 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
, 绑定组合时DisplayMemberPath
和SelectedValuePath
框。以上解决方案适用于胜利形式。
答案 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;