В этом DatePicker, если я ввожу недопустимую дату, например
1/1/20001 (введите ключ)
, я получаю следующее исключение
Возникло первое случайное исключение типа «System.FormatException» в mscorlib.dll.
Дополнительная информация: строка не была распознана как допустимый DateTime.
Но похоже, что это вызывается привязкой, и я не могу найти способ справиться с этим.
В отладке я получаю на экране вышеприведенное
Включил трассировку стека, и он говорит, что ошибка выдается на SearchItem.Date1 get
Но проблема в том, что get фактически не вызывается в этой ситуации.
Если я ввожу правильную дату, например 01.01.2000, я вижу и набор, и вызов.
Если я ввожу неверную дату, нет вызова для установки.
Если я ввожу неверную дату и нажимаю ввод или теряю фокус, просто возвращается к предыдущей дате и не генерирует исключение. Если предыдущая дата была нулевой, она возвращается к нулевой.
Для меня это критическая проблема, если пользователь вводит действительную дату, а затем вводит недопустимую дату, DatePicker просто возвращается к последней действительной дате. Таким образом, пользователь не знает, что дата не изменилась.
Вопрос в том, как я могу обработать исключение недопустимой даты?
<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
? потому что, если это так, при запуске вашего кода не возникает никаких исключений. - person Bahman_Aries   schedule 20.05.2015