【问题标题】:Control.DataBindings.Add in WinFormsWinForms 中的 Control.DataBindings.Add
【发布时间】:2016-05-09 16:52:46
【问题描述】:

当数据绑定被添加到 WinForms 中的控件时:

 Binding b =new Binding("Text", myDataRowView, "title");
 TitleTextBox.DataBindings.Add(b);

文本框显示 myDataRowView["title"] 处的值。

如果myDataRowView["title"] 被更新(直接,而不是通过表单控件),那么它的值就会改变

myDataRowView["title"] = "foo";

文本框是否应该反映新值? Adding 绑定到文本框是否设置了一个侦听器来侦听它已绑定到的列的更改?

或者当 DRV 在代码中发生更改时,控件是否必须重新绑定到 DataRowView,即不是因为用户在表单控件中键入数据的结果?

【问题讨论】:

  • 是的,TextBox 应该反映 DRV 字段中的更改。不,它不必反弹。但除非您所做的更改被写回数据源,否则不会触发任何触发器。

标签: winforms data-binding


【解决方案1】:

当我们说 更新 - 这里有两种情况。

更新基础数据源连接到控件(在您的情况下为文本框)。对于这一点,请查看 add overload - Add Method (String, Object, String, Boolean, DataSourceUpdateMode) DataSourceUpdateMode 属性控制更新的发生方式。

OnValidation - 如果您的控件有一些验证规则,则如果验证失败,基础值将不会更新。
OnPropertyChanged 无论如何都会更新底层源代码。

更新数据源时更新控件。 INotifyPropertyChanged 接口用于通知客户端(通常是绑定客户端)属性值已更改。所以为此你需要实现这个接口。

【讨论】:

  • 使用适当的数据源可以为您做到这一点。您应该不必自己实现INotifyPropertyChanged
  • 答案是问题的上下文,可能不是最好的数据源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2010-11-26
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多