gpt4 book ai didi

wpf - DatePicker System.FormatException

转载 作者:行者123 更新时间:2023-12-03 18:30:14 25 4
gpt4 key购买 nike

在此 DatePicker 中,如果我输入无效日期,例如
20001 年 1 月 1 日(输入键)
我得到以下异常

A first chance exception of type 'System.FormatException' occurred in mscorlib.dll

Additional information: String was not recognized as a valid DateTime.



但似乎这是由绑定(bind)引发的,我找不到处理它的方法。
在调试中,我在屏幕上看到了上面的内容

打开堆栈跟踪,它说错误是在 SearchItem.Date1 get 上引发的
但问题是在这种情况下实际上并没有调用 get

如果我输入一个有效的日期,例如 2000 年 1 月 1 日,我会看到集合并被调用。

如果我输入无效日期,则无需设置。

我输入无效日期并按输入或失去焦点只是恢复到前一个日期并且不会引发异常。如果之前的日期为空,则它恢复为空。

如果用户输入有效日期,这对我来说是一个关键问题
然后输入一个无效的日期,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");
}
}
}

最佳答案

我能想到的一种方法是使用 DateValidationError事件:

XAML:

<DatePicker Width="140" DisplayDateStart="1/1/1990" DisplayDateEnd="12/31/2020" 
SelectedDate="{Binding Path=Date1, Mode=TwoWay,
ValidatesOnExceptions=True, ValidatesOnDataErrors=True,
UpdateSourceTrigger=PropertyChanged}"
DateValidationError="DatePicker_DateValidationError" />

后面的代码:
private void DatePicker_DateValidationError(object sender, DatePickerDateValidationErrorEventArgs e)
{
// throw FormatException
e.ThrowException = true;

//OR

// handle the exception by showing message and clearing data
MessageBox.Show(e.Exception.Message);
((DatePicker)sender).Text = null;
}

关于wpf - DatePicker System.FormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27625798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com