2009-01-07 77 views
5

我有一個ComboBox設置如下,其中KVPListIList(的KeyValuePair如果它的問題)一個:綁定組合框爲IList和使用的SelectedValue

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

我然後已經設置了與SelectedValue結合,綁定到BindingSource(到DataSet)。無論出於何種原因,當窗體顯示時,組合框總是變爲空白。然而,它適當地填充,(IList的值顯示正常,可以選擇)。

現在,我已經盡了最大努力來跟蹤,並且它似乎在綁定時正確地設置了SelectedValue,但隨後它在某種程度上重置爲null。我已經玩過命令的東西,也沒有用。

任何人都可以闡明這一點或建議一種解決方法嗎?

對於相同的表格,我有另一個ComboBox在同一表格上,其SelectedValue綁定到相同的BindingSourceDataSourceDataSet,而不是IList,它的功能就像一個魅力。從IList開始DataTable可能是一個選項,但它看起來像是一大筆額外的開銷;我從枚舉中生成IList

回答

7

Ouch。在這一天基本上浪費了半天之後,我已經明白了。這完全是我的錯誤。

KVPList設定爲KeyValuePair<short,string>IList,但數據字段的類型是int的。本質上,數據綁定會觸發,並設置SelectedValue屬性。然後DisplayMemberValueMember綁定會觸發,再次檢查SelectedValue。由於ValueMember類型爲short,而不是int,因此它不會找到匹配項並將其設置爲空。

有趣的事情必須發生與拳擊和拆箱,但我太累了,不明白爲什麼現在。

我會離開這個問題,以防其他人遇到同樣的問題。這很難追查,因爲我希望它可以嘗試投射或拋出異常,而不是默默地變爲空。畢竟,shortint都是值類型,最後我檢查(int)10 == (short)10爲真。

+0

感謝您的回答。我遇到了同樣的問題。我的依賴項屬性類型是IList ,它與ILIst 綁定。 (Foo實現IFoo)。除了依賴項屬性值始終爲空,一切似乎都正常。沒有例外或調試輸出。當我將依賴項屬性類型更改爲IList 時,一切開始運作。 – 2010-02-08 20:17:42