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