这是最简单的场景。我有一个Form,其中有几个TextBoxes和一个BindingSource,绑定到DataSet实例,TextBoxes绑定到BindingSource。在这些TextBox中输入文本不会在我的BindingSource上引发CurrentItemChanged
事件;甚至当我将焦点更改为另一个文本框时。它只会在我移动到另一条记录时触发,这是人们对CurrentChanged
的期望。根据{{3}}:
引发CurrentItemChanged事件以响应引发CurrentChanged事件的所有情况。此外,每当更改Current的某个属性的值时,也会触发CurrentItemChanged。
请注意,我不想调用EndEdit(),因为这会提交我的更改。
修改
这是我的绑定代码。现在我也添加了OnPropertyChanged
,没有任何运气。
Me.bsCatItems.DataMember = "catalog_items"
Me.bsCatItems.DataSource = Me.DsInventory
Me.bsItems.DataSource = Me.bsCatItems
Me.bsItems.DataMember = "FK_CatalogItems_Items"
Me.TextBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.bsItems, "consignment_count", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
答案 0 :(得分:0)
我不确定它在winforms中是如何工作的,但是在wpf中你可以将绑定的updatesourcetrigger设置为属性更改。如果设置了此项,则每次在文本框中键入内容时,都会触发propertychanged-event。
我很确定winforms中有一个相同的机制。
答案 1 :(得分:0)
您正在寻找DataSourceUpdateMode.OnPropertyChanged
在窗体上绑定控件时,默认值为OnValidation
。
每次用户在控件中输入值时,您必须将其更改为OnPropertyChanged
才能更新
this.MyTextbox.DataBindings.Add(new Binding("Text", this.bindingSource, "fieldName", true, DataSourceUpdateMode.OnPropertyChanged));
您也可以从设计师处理(如果您使用VisualStudio)
答案 2 :(得分:0)
您必须实现INotifyPropertyChanged
接口才能启用CurrentItemChanged
事件 - 绑定源将自动订阅PropertyChanged
事件。
要查看INotifyPropertyChanged
如何实施的示例,请参阅此link