FooCB.DisplayMember = "FooNome";
FooCB.ValueMember = "Foo";
FooCB.DataSource = FooRepository.Instance.All();
FooCB.DataBindings.Add("SelectedItem", Bar, "Foo");
的代碼,但是當我展示的形式SelectedItem
永遠是第一位。 我在做什麼錯?
FooCB.DisplayMember = "FooNome";
FooCB.ValueMember = "Foo";
FooCB.DataSource = FooRepository.Instance.All();
FooCB.DataBindings.Add("SelectedItem", Bar, "Foo");
的代碼,但是當我展示的形式SelectedItem
永遠是第一位。 我在做什麼錯?
我一直在努力與Winforms組合框和最近的數據綁定的行爲,這些是我的意見(.Net4)時將ComboBox.DataSource
綁定到項目列表並綁定對象屬性到ComboBox.SelectedItem
。
當(你的情況List<Foo>
)至ComboBox.DataSource
結合對象的列表,在列表中的第一對象在組合框始終顯示。
如果你將對象屬性綁定到ComboBox.SelectedItem
(在你的情況下爲Bar.Foo
),並且該對象屬性與其中一個組合框列表對象相匹配,那麼該對象將顯示在組合框中。如果對象屬性爲空(Bar.Foo == null
)或對象屬性不在組合框列表中,則第一個對象顯示在組合框中。
設置ComboBox.SelectedItem = null
或ComboBox.SelectedIndex = -1
清除組合框上顯示的項目,即使this似乎警告它。並將您的綁定對象屬性設置爲null。
如果用戶在使用ComboBox.DropDownStyle == DropDown
(帶有退格鍵)時清除了組合框選擇,則綁定的對象屬性將設置爲空。
如果文件的屬性被綁定到Combobox.SelectedItem
(Bar.Foo
),你編程的綁定屬性設置爲一個值和值出現在下拉列表列表然後將修改後的值將顯示在對象上實現INotifyPropertyChanged
。如果您將該屬性設置爲null或列表中沒有值,那麼組合框的顯示值將不會更改。
那麼你能做些什麼呢?我唯一真正的問題是當我的綁定屬性爲空時沒有顯示任何值,所以我剛剛在第3點中明確地設置了Combobox.SelectedItem = null
。您可能能夠擴展ComboBox
並覆蓋默認行爲,但到目前爲止,我已經在這裏和那裏附加了一行代碼,並在非可空屬性上使用了默認值。
也許你錯過了一些decleration。如果您從工具箱創建了Combobox, - 我遇到了類似的問題 - 您可能需要在XAML上添加Combobox的名稱作爲標記。
除此之外,如果您通過代碼動態創建它,請檢查您是否缺少類的任何刪除。
在顯示窗體後更新數據源。 – Sinatr 2013-03-13 12:44:17
我該如何檢查?注意:FooCB顯示所有Foo。 – 2013-03-13 12:47:20
你在哪裏設置選定的項目? – 2013-03-13 12:47:27