Я новичок в привязке данных и сегодня столкнулся со следующей странностью, которую не могу понять:
У меня есть форма с двумя метками (labelA и labelB) и двумя кнопками (buttonA и buttonB).
Форма содержит объект (называемый «formState») с двумя свойствами (CountA и CountB). labelA.Text связан данными с formState.CountA, labelB.Text связан данными с formState.CountB.
Когда нажата кнопка A, formState вызывает событие PropertyChange с «CountA» в качестве имени свойства. Когда кнопка B нажата, она вызывает formState.PropertyChange с "CountB" в качестве имени свойства.
Я ожидаю, что только метка A обновляется при нажатии кнопки A, и только метка B обновляется при нажатии кнопки B. Однако обе метки обновляются, когда я нажимаю любую кнопку. Я вижу это, потому что свойства CountA и CountB увеличиваются и возвращают счетчик каждый раз, когда считываются их значения. Код ниже.
У кого-нибудь есть объяснение такому поведению?
public partial class Form1 : Form
{
private FormState formState = new FormState();
public Form1()
{
InitializeComponent();
labelA.DataBindings.Add(
new Binding("Text", formState, "CountA"));
labelB.DataBindings.Add(
new Binding("Text", formState, "CountB"));
}
private void buttonA_Click(object sender, EventArgs e)
{
formState.raisePropertyChangedEvent("CountA");
// both labelA and labelB get updated - why not just labelA?
}
private void buttonB_Click(object sender, EventArgs e)
{
formState.raisePropertyChangedEvent("CountB");
// both labelA and labelB get updated - why not just labelB?
}
public class FormState : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int countA = 0;
private int countB = 0;
public int CountA
{
get { return ++countA; }
}
public int CountB
{
get { return ++countB; }
}
public void raisePropertyChangedEvent(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}