我有一个组合框,在设计视图中我将它数据绑定到一个绑定源,如下所示:
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等无关。
好的,每当我通过UI更改组合框时,它永远不会更改底层对象,因此永远不会为自定义对象中的属性命中setter。但是,我刚刚注意到,如果我关闭控件,它会触发setter,并更改底层对象。为什么会这样?
看来,问题在于我的约束力。我将“DataSourceUpdateMode.OnPropertyChanged”添加到绑定中,现在可以正常工作!!
答案 0 :(得分:1)
问题在于我的约束力。我将“DataSourceUpdateMode.OnPropertyChanged”添加到绑定中,现在可以正常工作!!