I’m working on a WPF MVVM application and I’ve got a TextBox on my view that is bound to a DateTime property on the ViewModel. Seems simple enough, but when I clear the text in the TextBox, the property never changes. In fact, it never even fires until I begin typing “4/1…” and then it fires. What can I do to fix this? Obviously I could bind the TextBox to a string property and then update the real property in the setter, but that’s a bit of a hack. There’s got to be a better way…
ViewModel
private DateTime _startDate;
public DateTime StartDate
{
get { return _startDate; }
set
{
_startDate = value;
OnPropertyChanged("StartDate");
}
}
View
<TextBox Text="{Binding Path=StartDate,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=true}"/>
It depends on what you want to happen when the text box content isn’t a valid DateTime. The empty string can’t be parsed as a DateTime, so when you clear your text box, WPF doesn’t know what value to push back to your binding source, so it doesn’t do anything, and your setter doesn’t get run. Once you type enough to be parseable, WPF gets with the program and starts updating again, so your PropertyChanged event starts firing again. So the first thing you need to do is decide what DateTime value you want when the text is empty or unparseable.
Once you’ve done that, you can create an IValueConverter:
and insert that into the binding: