CurrentItemChanged没有提出

时间:2013-03-06 06:54:11

标签: .net vb.net winforms ado.net bindingsource

这是最简单的场景。我有一个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))

3 个答案:

答案 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

相关问题