2013-03-08 227 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