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
Dataproperty changes. The most straightforward way is to either:DataSourceClass:public event EventHandler DataChanged;DataSourceClassimplementINotifyPropertyChanged. This gives you aPropertyChangedevent.Either way you’ll have a new event that you need to raise. You’ll need to convert your
Dataproperty from an auto property to one with a private field, agetmethod and asetmethod. Once you have an explicit getter and setter for theDataproperty, you’ll be able to raise your event from inside the setter.