Скажите, что у меня есть глобальная переменная INT, названный X. С тех пор X глобально, мы можем предположить, что что-либо может изменить его значение, таким образом, оно изменяется каждый раз.
Скажите, что у меня есть Элемент управления "метка", названный "маркировкой". Вот то, что я хочу выполнить:
Я хочу "связать" значение маркировки. Текст к переменной X. Таким способом, которым, когда переменная X будет заменена, это будет отражено назад для маркировки. Текст.
Теперь, я не хочу писать слушателям события и играть с делегатами с этим (я хочу наименьшее количество объема кода как возможное). Существует ли способ использовать компонент DataBinding для этого? или какие-либо другие новые методы?
Если вы хотите использовать инфраструктуру привязки данных и отразить изменения, внесенные в значение, вам нужен способ уведомить пользовательский интерфейс об изменениях, внесенных в значение привязки.
Таким образом, лучший способ сделать это - использовать свойство и реализовать интерфейс INotifyPropertyChanged
, например:
class frmFoo : Form, INotifyPropertyChanged
{
private string _foo;
public string Foo
{
get { return _foo; }
set
{
_foo = value;
OnPropertyChanged("Foo");
}
}
protected virtual void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
Также помните, что вам нужно сначала настроить привязку к метке:
public frmFoo()
{
InitializeComponent();
lblTest.DataBindings.Add(new Binding("Text", this, "Foo"));
}
Я не думаю, что вы сможете выполнить привязку к публичной переменной. Сама по себе переменная не может уведомлять слушателей об изменении своего значения.
Вот почему вам нужно заключить переменную в свойство. В установщике вы вызываете событие, чтобы уведомить связанные с ним элементы управления пользовательского интерфейса, чтобы они могли обновить и отобразить новое значение. У инфраструктуры есть механизм для этого - INotifyPropertyChanged - попробуйте эту ссылку, чтобы получить инструкции .
Создайте свойство для X. В установщике обновите свойство label.Text.
private int _x;
public int X {
get
{
return _x;
}
set
{
_x = value;
label.Text = _x.ToString();
}
}