【问题标题】:Binding a ComboBox to an IList and using SelectedValue将 ComboBox 绑定到 IList 并使用 SelectedValue
【发布时间】:2010-09-30 01:51:38
【问题描述】:

我有一个ComboBox 设置如下,其中KVPList 是一个IList(如果重要,属于KeyValuePair):

comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;

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

现在,我已尽力追踪,它似乎在绑定时最初正确设置了 SelectedValue,但随后在某处它被重置为 null。我也玩过调用事物的顺序,但无济于事。

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

作为记录,在同一个表单上,我在同一个表单上还有另一个ComboBox,它的SelectedValue 绑定到同一个BindingSourceDataSourceDataSet,而不是 IList,它就像一个魅力。从IList 中创建DataTable 可能是一种选择,但这似乎需要大量额外的开销;我正在从枚举中生成IList

【问题讨论】:

    标签: .net winforms data-binding combobox selectedvalue


    【解决方案1】:

    哎哟。在这个基本上浪费了半天之后,我已经弄清楚了。这完全是我的错误。

    KVPList 设置为 IListKeyValuePair<short,string>,但数据字段的类型为 int。本质上,数据绑定会触发,并设置SelectedValue 属性。然后DisplayMemberValueMember 绑定将触发,再次检查SelectedValue。由于ValueMember 的类型是short,而不是int,因此它找不到匹配项,因此将其设置为null。

    装箱和拆箱一定会发生一些有趣的事情,但我现在太累了,不明白为什么。

    我会留下这个问题,以防其他人遇到同样的问题。很难追踪,因为我希望它要么尝试强制转换,要么抛出异常,而不是默默地变为 null。毕竟,shortint 都是值类型,最后我检查了(int)10 == (short)10 成立。

    【讨论】:

    • 感谢您的回答。我遇到了同样的问题。我的依赖属性类型是绑定到 ILIst 的 IList。 (Foo 实现 IFoo)。除了依赖属性值始终为空外,一切似乎都在工作。没有异常或调试输出。当我将依赖属性类型更改为 IList 时,一切都开始工作了。
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2011-04-17
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多