Основываясь на комментариях в исходном сообщении, вот несколько способов сделать это:
(этот код основан на приложении Winform в VS2010, есть 1 форма с меткой «ValueLabel», текстовое поле «NewValueTextBox» и кнопка.
Кроме того, существует класс «MyClass», который представляет класс с изменениями, которые вы хотите опубликовать.
Вот код для класса. Обратите внимание, что я реализую INotifyPropertyChanged, и у меня есть событие. Вам не нужно реализовывать INotifyPropertyChanged, и у меня есть событие, которое вызывается при изменении свойства.
Вы должны быть в состоянии запустить форму, ввести что-то в текстовое поле, нажать кнопку и увидеть значение изменения метки.
public class MyClass: System.ComponentModel.INotifyPropertyChanged
{
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
public string AValue
{
get
{
return this._AValue;
}
set
{
if (value != this._AValue)
{
this._AValue = value;
this.OnPropertyChanged("AValue");
}
}
}
private string _AValue;
protected virtual void OnPropertyChanged(string propertyName)
{
if(this.PropertyChanged != null)
this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
Пример 1: простая привязка данных между меткой и значением:
Поэтому на этот раз мы просто свяжем ярлык с экземпляром вашего класса. У нас есть текстовое поле и кнопка, которую вы можете использовать для изменения значения свойства в MyClass. Когда это изменится, привязка данных приведет к автоматическому обновлению метки:
ПРИМЕЧАНИЕ. Обязательно подключите Form1_Load в качестве события загрузки для формы и UpdateValueButton_Click в качестве обработчика нажатия кнопки, иначе ничего не будет работать!
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private MyClass TheClass;
private void Form1_Load(object sender, EventArgs e)
{
this.TheClass = new MyClass();
this.ValueLabel.DataBindings.Add("Text", this.TheClass, "AValue");
}
private void UpdateValueButton_Click(object sender, EventArgs e)
{
// simulate a modification to the value of the class
this.TheClass.AValue = this.NewValueTextBox.Text;
}
}
Пример 2
Теперь давайте свяжем значение класса непосредственно с текстовым полем. Мы закомментировали код в обработчике нажатия кнопки, и мы связали и текстовое поле, и метку со значением объекта. Теперь, если вы просто отойдете от текстового поля, вы увидите ваши изменения ...
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private MyClass TheClass;
private void Form1_Load(object sender, EventArgs e)
{
this.TheClass = new MyClass();
// bind the Text property on the label to the AValue property on the object instance.
this.ValueLabel.DataBindings.Add("Text", this.TheClass, "AValue");
// bind the textbox to the same value...
this.NewValueTextBox.DataBindings.Add("Text", this.TheClass, "AValue");
}
private void UpdateValueButton_Click(object sender, EventArgs e)
{
//// simulate a modification to the value of the class
//this.TheClass.AValue = this.NewValueTextBox.Text;
}
Пример 3
В этом примере мы вообще не будем использовать привязку данных. Вместо этого мы подключим событие изменения свойства к MyClass и обновим вручную.
Обратите внимание, что в реальной жизни у вас может быть более конкретное событие, чем с измененным свойством - у вас может быть изменение AValue, которое возникает только при изменении этого свойства.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private MyClass TheClass;
private void Form1_Load(object sender, EventArgs e)
{
this.TheClass = new MyClass();
this.TheClass.PropertyChanged += this.TheClass_PropertyChanged;
}
void TheClass_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "AValue")
this.ValueLabel.Text = this.TheClass.AValue;
}
private void UpdateValueButton_Click(object sender, EventArgs e)
{
// simulate a modification to the value of the class
this.TheClass.AValue = this.NewValueTextBox.Text;
}
}