如何获取填充有字典的ComboBox中SelectedValue的值

9
我们有这样的字典:
var dictionary = new Dictionary<int, int> { { 0, 100 }, { 1, 202 }, { 2, 309 }, };

等等,有很多值。将字典绑定到comboBox上,如下所示:

comboBox1.ItemsSource = dictionary;
comboBox1.DisplayMemberPath = "Value";

我想知道如何获取该组合框的选定值,因为 comboBox.Text 只适用于手动输入的值,而这段代码:

string value = comboBox1.SelectedValue.ToString();

返回值类似于[1,202],而我需要清楚的int TValue“202”。我无法找到类似的问题,所以在这里提问,并希望答案对其他人有用。


使用这种方法作为学习如何使用Dictionary<int,int>Dictionary<string,int>创建BindingSource的替代方案:https://dev59.com/umw15IYBdhLWcg3wxuch - MethodMan
2个回答

13

看起来你需要将 SelectedValue 强制转换成 KeyValuePair<int, int>

string value = ((KeyValuePair<int, int>)comboBox1.SelectedValue).Value.ToString();

然而,你需要在那里设置一个断点并检查SelectedValue的真实类型。

我假设它是KeyValuePair<int, int>,因为你的源集合是Dictionary<int, int>,并且因为SelectedValue.ToString()的输出字符串是[1, 202]


太棒了!非常好用,非常感谢!!我会尽快接受你的答案。 - Mike
最好使用SelectedItem,因为如果指定了SelectedValuePath,那么SelectedValue的类型可能不同。 - VoteCoffee

2

如果您指定了ValueMember,就可以避免强制转换操作。重要的是在数据源之前设置路径,否则它会触发带有一个键值对的选定值的更改事件。

comboBox1.DisplayMemberPath = "Value";
comboBox1.SelectedValuePath= "Key";
comboBox1.ItemsSource = dictionary;
string value = comboBox1.SelectedValue.ToString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接