将ComboBox绑定到IList并使用SelectedValue

lc.*_*lc. 5 .net data-binding combobox selectedvalue winforms

我有一个ComboBox如下设置,其中KVPListIList(KeyValuePair如果重要的话):

comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;
Run Code Online (Sandbox Code Playgroud)

然后我设置了绑定SelectedValue,绑定到BindingSource(到a DataSet).无论出于何种原因,在显示表单时,组合框始终显示为空白.但是它已正确填充(IList显示的值很好并且可以选择).

现在,我已尽力追踪,看起来最初在绑定时正确设置了SelectedValue,但随后它被重置为某个地方null.我玩过订单的东西也被调用,无济于事.

任何人都可以对此有所了解或建议解决方法吗?

对于记录,在同一个表单上,我ComboBox在同一个表单上有另一个表单,它的SelectedValue绑定是相同的BindingSource.这DataSource是一个DataSet,而不是一个IList,它就像一个魅力.这可能是做出一种选择DataTableIList,但它似乎是一大堆额外的开销; 我是IList从枚举中生成的.

lc.*_*lc. 7

哎哟.在基本上浪费了半天之后,我已经弄明白了.这对我来说完全是个错误.

KVPList被设置为一个IList的,但数据字段是类型的.从本质上讲,数据绑定会触发,并设置属性.然后,绑定将触发,再次检查.由于是类型,而不是,它不会找到匹配,因此将其设置为null.KeyValuePair<short,string>intSelectedValueDisplayMemberValueMemberSelectedValueValueMembershortint

有趣的东西必须发生在拳击和拆箱,但我太累了,无法理解为什么现在.

我会留下这个问题以防其他人遇到同样的问题.跟踪是很难的,因为我希望它能够尝试强制转换或抛出异常,而不是默默地转为null.毕竟,short并且int都是值类型,最后我检查(int)10 == (short)10保持为真.