Очевидно, что обновление любого значения в источнике данных приведет к обновлению всех привязок.Это объясняет поведение (настройка myClass.Text1
приводит к обновлению textBox2
с текущим значением myClass.Text2
).К сожалению, в нескольких постах, которые мне удалось найти, просто сказано: «Вот как это работает».
Один из способов справиться с этим - создать BindingSource , установить BindingSource.DataSource = myClass
,а затем привяжите свои текстовые поля к BindingSource
.
BindingSource
вызывает ListChanged события, если основным источником данных является список и элементы добавляются, удаляются и т. Д., или , если свойства DataSource
изменяются,Вы можете подавить эти события, установив BindingSource.RaiseListChangedEvents в 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;
}
}
НТН