Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bind a label to a "variable"

Say I have a global variable INT named X. Since X is global, we can assume that anything can modify its value so it is being changed everytime.

Say I have a Label control named "label". Here's what I want to accomplish:

I want to "bind" the value of label.Text to variable X. In such a way that when variable X is changed, it will be reflected back to label.Text.

Now, I don't want to write event listeners and play with delegates with this one (I want the least amount of code as possible). Is there a way to use the DataBinding component for this one? or any other novel techniques?

like image 655
Ian Avatar asked Jun 30 '10 06:06

Ian


1 Answers

If you want to use the Databinding infrastructure, and reflect the changes made to a value, you need a way to notify the UI about the changes made to the binding value.

So the best way to do that is to use a property and implement the INotifyPropertyChanged interface, like this:

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 } 

Also remember that you need to setup the binding on the label first:

public frmFoo() {     InitializeComponent();     lblTest.DataBindings.Add(new Binding("Text", this, "Foo")); } 
like image 95
Iñaki Elcoro Avatar answered Oct 12 '22 14:10

Iñaki Elcoro