显然,更新数据源上的任何值都会导致所有绑定更新。这解释了行为(设置myClass.Text1
causes textBox2
更新为当前值myClass.Text2
)。不幸的是,我能找到的几篇文章几乎只是说“这就是它的工作原理”。
处理这个问题的一种方法是创建一个绑定源 http://msdn.microsoft.com/en-us/library/ms158145.aspx, set BindingSource.DataSource = myClass
,然后将您的文本框绑定到BindingSource
.
BindingSource
raises 列表已更改 http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.listchanged.aspx如果基础数据源是列表并且添加、删除项目等,则发生事件,or if the DataSource
属性改变。您可以通过设置来抑制这些事件BindingSource.RaiseListChangedEvents http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.raiselistchangedevents.aspx to false
,这将允许您设置多个属性myClass
无需数据绑定即可更新绑定控件。
public partial class Form1 : Form
{
MyClass myClass = new MyClass("one", "two");
BindingSource bindingSource = new BindingSource();
public Form1()
{
InitializeComponent();
bindingSource.DataSource = myClass;
textBox1.DataBindings.Add("Text", bindingSource, "Text1", true, DataSourceUpdateMode.Never);
textBox2.DataBindings.Add("Text", bindingSource, "Text2", true, DataSourceUpdateMode.Never);
}
private void button1_Click(object sender, EventArgs e)
{
bindingSource.RaiseListChangedEvents = false;
myClass.Text1 = textBox1.Text;
myClass.Text2 = textBox2.Text;
bindingSource.RaiseListChangedEvents = true;
}
}
HTH