Winforms ComboBox 2路数据绑定仅适用于1种方式

时间:2013-05-20 15:31:50

标签: winforms data-binding

我有一个组合框,在设计视图中我将它数据绑定到一个绑定源,如下所示:

this.itemTypeComboBox.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.itemTypeContainerBindingSource, "ItemType", true));
this.itemTypeComboBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.itemTypeContainerBindingSource, "ItemType", true));

在load事件后面的代码中,我有以下内容:

// bind the combobox to the enum
this.itemTypeComboBox.DataSource = Enum.GetValues(typeof(OpticalItemType));

// bind a custom object to the datasource
this.itemTypeContainerBindingSource.DataSource = customObjectContainer;

“customObjectContainer”是一个包含绑定到组合框的属性“ItemType”的对象,对象的所有属性都通过“INotifyPropertyChanged”使用更改通知。

在我的代码中,如果我以编程方式更改自定义对象,则更改将反映在组合框中。但是,如果我通过UI更改组合框,则绑定源以及自定义对象不会反映更改。

任何想法我做错了什么?

由于它是一个单一的对象,它与使用BindingList等无关。

更新1:

好的,每当我通过UI更改组合框时,它永远不会更改底层对象,因此永远不会为自定义对象中的属性命中setter。但是,我刚刚注意到,如果我关闭控件,它会触发setter,并更改底层对象。为什么会这样?

问题已解决:

看来,问题在于我的约束力。我将“DataSourceUpdateMode.OnPropertyChanged”添加到绑定中,现在可以正常工作!!

1 个答案:

答案 0 :(得分:1)

问题在于我的约束力。我将“DataSourceUpdateMode.OnPropertyChanged”添加到绑定中,现在可以正常工作!!