绑定值为null时,将显示WPF日期选择器验证错误

时间:2013-03-08 16:31:57

标签: .net wpf entity-framework

我有一个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,因为我在其他地方使用它来评估业务逻辑。

要查看我的意思,这里是一个使用datepicker和日期为空值的表单,您可以看到验证错误:  wpf datepicker validation error

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

  

System.Windows.Data错误:7:ConvertBack无法转换值''   (输入'String')。 BindingExpression:路径= dtComplete;   的DataItem = 'job_BF0D6052EEADCDA3C2B6D1A174D77C322D5AB16A035F214705610767131A80F0'   (的HashCode = 17930557);目标元素是'DatePicker'   (名称= 'dtComplete'); target属性是'Text'(类型'String')   FormatException:'System.FormatException:String未被识别为   有效的DateTime。在System.DateTime.Parse(String s,   System.Convert.ToDateTime(String。的IFormatProvider提供者)   价值,IFormatProvider提供者)at   System.Convert.ChangeType(Object value,Type conversionType,   IFormatProvider提供商)   System.Windows.Data.BindingExpression.ConvertBackHelper(的IValueConverter   converter,Object value,Type sourceType,Object parameter,   CultureInfo culture)'

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

提前致谢

2 个答案:

答案 0 :(得分:6)

想出来:

我绑定了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}" />

现在按照我的意愿行事,选择日期水印仍然存在且绑定日期值有效。它现在太明显了。简单修复

答案 1 :(得分:1)

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