Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 绑定值为null时出现WPF datepicker验证错误_.net_Wpf_Entity Framework - Fatal编程技术网

.net 绑定值为null时出现WPF datepicker验证错误

.net 绑定值为null时出现WPF datepicker验证错误,.net,wpf,entity-framework,.net,Wpf,Entity Framework,我有一个WPF应用程序,其中我使用的日期选择器绑定到实体框架(使用SQL server)实体的日期字段。我将其装订如下: <DatePicker x:Name="dtComplete" Style="{StaticResource FTC_DatePicker}" Grid.Column="2" Grid.Row="7" Grid.ColumnSpan="3" Text="{Binding dtComp

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

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

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

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

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

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

System.Windows.Data错误:7:ConvertBack无法转换值“” (键入“String”)。BindingExpression:Path=dtComplete; 数据项=“作业”BF0D6052EADCDA3C2B6D1A174D77C322D5AB16A035F214705610767131A80F0” (HashCode=17930557);目标元素是“日期选择器” (Name='dtComplete');目标属性为“Text”(类型为“String”) FormatException:'System.FormatException:字符串未被识别为 有效的日期时间。在System.DateTime.Parse(字符串s, 在System.Convert.ToDateTime(字符串 值,IFormatProvider(提供程序)位于 System.Convert.ChangeType(对象值、类型转换类型、, IFormatProvider)位于 System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter 转换器、对象值、类型sourceType、对象参数、, 文化信息(文化)'

在用户更改输入之前,是否有人可以帮助我消除此验证错误


提前感谢

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

算出了:

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

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

现在,它的行为符合我的要求,选择日期水印仍然存在,并且绑定日期值有效。现在一切都太明显了。简单修复

感谢回复,“选择日期”文本是控件中内置的“水印”。如果不重写datepicker类并更改.NET代码中的水印值(我希望避免),则无法更改它。