我有一个组合框,在设计视图中我将它数据绑定到绑定源,如下所示:
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));
在加载事件后面的代码中,我有以下内容:
// 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”,它现在可以工作了!!