I am trying to make a (very) simple Data Binding test, but it doesn't work as I expected... Say I have the following classes:
// this class represents some kind of data producer
public class DataSourceClass
{
public string Data { get; set; }
public DataSourceClass()
{ }
}
//this form holds the TextBox control as the Data consumer
public partial class DatabindingTestForm : Form
{
public DataSourceClass ds { get; set; }
public DatabindingTestForm()
{
InitializeComponent();
ds = new DataSourceClass();
textBox.DataBindings.Add("Text", ds, "Data");
}
private void checkBox_CheckedChanged(object sender, EventArgs e)
{
if (checkBox.Checked)
ds.Data = "CHECKED";
else
ds.Data = "NOT CHECKED";
}
}
I didn't add the designer code, but its there, and the form holds a TextBox object and a CheckBox object. As you can understand, I am trying to make the Textbox Text property change as the user checks \ unchecks the CheckBox. But this code doesn't update the TextBox Text property. Can someone please explain me what am I missing?
You need some way to notify WinForms when the value of the Data
property changes. The most straightforward way is to either:
DataSourceClass
: public event EventHandler DataChanged;
DataSourceClass
implement INotifyPropertyChanged
. This gives you a PropertyChanged
event.Either way you'll have a new event that you need to raise. You'll need to convert your Data
property from an auto property to one with a private field, a get
method and a set
method. Once you have an explicit getter and setter for the Data
property, you'll be able to raise your event from inside the setter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With