Я новичок в связывании данных и столкнулся со следующей странностью, которую не понимаю:
У меня есть форма с двумя метками (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));
}
}
}