假设我的表单中有一个String属性(表单没有实现INotifyPropertyChanged)。我还创建了一个BindingSource并将其DataSource设置为表单。然后我将一个文本框绑定到我的表单上的String属性(间接地,使用BindingSource)。
问题1:当我在运行时更改文本框中的值时,为什么不在String属性的setter中命中断点?我认为将控件绑定到String属性将允许在此方向上更新(GUI - >成员数据)自动发生
问题2:当GUI以外的其他内容更改String属性时,如何触发另一方向的更新(成员数据 - > GUI)?我不想实现INotifyPropertyChanged接口并将NotifyPropertyChanged添加到setter。我认为通过使用BindingSource的ResetBindings,我至少可以手动触发
public partial class Form1 : Form
{
private String m_blah;
public String Blah
{
get
{
return m_blah;
}
set
{
m_blah = value;
}
}
public Form1()
{
InitializeComponent();
textBox1.DataBindings.Add(new Binding("Text", bindingSource1, "Blah",true,DataSourceUpdateMode.OnValidation));
}
private void button1_Click(object sender, EventArgs e)
{
Blah = "Clicked!";
this.bindingSource1.ResetBindings(false); //expecting the GUI to update and say "Clicked!"
}
}
答案 0 :(得分:6)
this.bindingSource1.DataSource = this;
我认为您忘记分配数据源。