I had a TextBox that I had bound to a property on a class that implements INotifyProperyChanged. No matter what I did, I just couldn't get the TextBox to update the bound property. Each time the text box just reverted back to it's original value. A simplified version of my class looked like this:
public class KeyboardWedgeScanner : INotifyPropertyChanged
{
public TimeSpan ScanTimeout
{
get
{
return TimeSpan.FromMilliseconds(timeoutTimer.Interval);
}
set
{
timeoutTimer.Interval = value.TotalMilliseconds;
OnPropertyChanged("ScanTimeout");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
In my form I bound the textbox with this in my constructor:
InScannerTimeout.DataBindings.Add("Text", scanner, "ScanTimeout");
This is exactly how a bound TextBoxes in another project and it worked fine there. I messed around with the DataSourceUpdateMode parameter on an overload of Add but that didn't help either. It wasn't until I set the formattingEnabled property to true did it start working:
InScannerTimeout.DataBindings.Add("Text", scanner, "ScanTimeout", true);
The only thing I can think of is that something about the TimeSpan class requires this to return the TextBox.Text's string value back into an instance of TimeSpan.