4

我有一个 WPF 应用程序,我在其中使用绑定到实体框架(带有 SQL 服务器)实体的日期字段的日期选择器。我将其绑定如下:

<DatePicker x:Name="dtComplete" Style="{StaticResource FTC_DatePicker}" Grid.Column="2" Grid.Row="7" Grid.ColumnSpan="3"                                            
Text="{Binding dtComplete, Mode=TwoWay, ValidatesOnDataErrors=True}"/>

绑定工作正常,可以更新到实体。

我的问题是,当基础数据库字段为空时,我会选择我想要的日期水印,但该水印正在被验证并返回为不是日期格式。我想保留水印,但在用户更改输入之前没有验证触发器。另外,我想保留ValidatesOnDataErrors=True,因为我在其他地方使用它来评估业务逻辑。

要明白我的意思,这是一个使用日期选择器的表单,其日期为空值,您可以看到验证错误: wpf datepicker验证错误

调试时的输出窗口给出以下验证转换错误:

System.Windows.Data 错误:7:ConvertBack 无法转换值“”(类型“字符串”)。绑定表达式:路径=dtComplete;DataItem='job_BF0D6052EEADCDA3C2B6D1A174D77C322D5AB16A035F214705610767131A80F0' (HashCode=17930557); 目标元素是'DatePicker'(名称='dtComplete');目标属性是“文本”(类型“字符串”) FormatException:“System.FormatException:字符串未被识别为有效的 DateTime。在 System.DateTime.Parse(String s, IFormatProvider provider) 在 System.Convert.ToDateTime(String value, IFormatProvider provider) 在 System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) 在 System.Windows.Data.BindingExpression .ConvertBackHelper(IValueConverter转换器,对象值,类型sourceType,对象参数,

在用户更改输入之前,有人可以帮我摆脱这个验证错误吗?

提前致谢

4

2 回答 2

7

弄清楚了:

我正在绑定到 hte datePicker 的文本值,因此它试图将水印文本验证为日期,但我真正应该做的是绑定到 selectedDate 属性,如下所示:

<DatePicker x:Name="dtComplete" Style="{StaticResource FTC_DatePicker}" Grid.Column="2" Grid.Row="7" Grid.ColumnSpan="3"                                                                                        
 SelectedDate="{Binding dtComplete, Mode=TwoWay, ValidatesOnDataErrors=True}" />

现在它的行为如我所愿,选择日期水印仍然存在并且绑定日期值有效。现在都太明显了。简单修复

于 2013-03-08T19:54:09.890 回答
1

问题实际上是日期选择器的标准行为是使用选定的值来突出显示日历上的日期。由于您在 value 属性中放置了一个非日期值,因此当日历被激活时,它不知道该怎么做。打开日期选择器日历时会触发一个事件“下拉菜单”。一旦打开,您可以将值设置为今天,这将消除您的错误。
我不清楚的是您如何首先显示该文本。我认为 datepicker 验证了输入的任何值。

于 2013-03-08T17:05:18.077 回答