2013-03-08 64 views
3

我有一个WPF应用程序,其中我使用绑定到实体框架(使用SQL Server)实体的日期字段的日期选择器。我把它绑定如下:当绑定值为空时出现WPF datepicker验证错误

<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 validation error

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

System.Windows.Data Error: 7 : ConvertBack cannot convert value '' (type 'String'). BindingExpression:Path=dtComplete; DataItem='job_BF0D6052EEADCDA3C2B6D1A174D77C322D5AB16A035F214705610767131A80F0' (HashCode=17930557); target element is 'DatePicker' (Name='dtComplete'); target property is 'Text' (type 'String') FormatException:'System.FormatException: String was not recognized as a valid DateTime. at System.DateTime.Parse(String s, IFormatProvider provider) at System.Convert.ToDateTime(String value, IFormatProvider provider) at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'

有人能帮我摆脱这个验证错误,直到用户改变输入吗?

在此先感谢

回答

5

想通了:

我结合兴田日期选择器的文本价值,所以它试图验证水印文本为日期,但是我真正应该做的事情是有约束力的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

这个问题实际上是,日期选择器的标准行为是使用选定的价值凸显日历上的日子。由于您在值属性中添加了非日期值,因此当日历激活时,它不知道该怎么做。有一个事件“dropdown”,当datepicker日历打开时触发。您可以将其值设置为今天打开,这将消除您的错误。
我不清楚的是如何让文本显示在第一位。我认为datepicker验证了输入的任何值。

+0

感谢您的回复,“选择日期”文本是内置于控件中的“水印”。如果不重写日期选择器类并更改我希望避免的.NET代码中的水印值,就不能更改它。 – 2013-03-08 17:43:19

相关问题