在这个日期选择器中,如果我输入一个无效的日期,比如1/1/20001(按下回车键),我会得到以下异常:
“System.FormatException”类型的第一次机会异常发生在mscorlib.dll中
附加信息:无法将字符串识别为有效的 DateTime。
但似乎是绑定引起的,我找不到处理它的方法。
在调试中,我看到上面的内容出现在屏幕上。
打开堆栈跟踪,它说错误是在SearchItem.Date1 get上抛出的,但问题是在那种情况下实际上并没有调用get。
如果我输入有效日期,比如1/1/2000,我会看到set和get都被调用。
如果我输入一个无效的日期,就不会调用set。
如果我输入一个无效的日期,然后按下回车或失去焦点,它只会恢复到之前的日期,而不会抛出异常。如果之前的日期为空,它将恢复为空。
对于我来说,这是一个严重的问题,因为如果用户输入有效日期,然后输入无效日期,日期选择器会恢复到上一个有效日期。所以用户不知道日期没有改变。
问题是我怎样才能处理无效的日期异常?
<DatePicker Width="140" DisplayDateStart="1/1/1990" DisplayDateEnd="12/31/2020"
SelectedDate="{Binding Path=Date1, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"/>
如果我取出, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged
没什么改变
private DateTime? date1;
public DateTime? Date1
{
get
{
try
{
return date1;
}
catch (Exception ex)
{
return (DateTime?)null;
throw;
}
}
set
{
if (date1 != value)
{
date1 = value;
NotifyPropertyChanged("Date1");
}
}
}
DatePicker
,System.Windows.Controls.DatePicker
吗?因为如果是的话,当我运行你的代码时没有抛出任何异常。 - Bahman_Aries