2011-04-13 159 views
2

我有一個SL4用戶控件。它包含一個DatePicker。該控件公開DateTime依賴屬性(不可爲空,因爲它是必填字段)。我將DatePicker的SelectedDate(可爲空值<DateTime>)綁定到{RelativeSource Self}的此DateTime屬性,爲雙向。除非在DatePicker中輸入空日期,否則此綁定將起作用。該綁定使用ValidatesOnExceptions設置,因此DatePicker的邊框變爲紅色,但在工具提示中它顯示「輸入的格式不正確」。但應該說這個領域是必需的。SilverLight需要日期選擇器驗證

我嘗試了一個自定義的IValueConverter,它用自定義文本引發了一個異常(ValidationException,FormatException,InvalidOperationException等等),但它們都以未處理的方式結束。

我知道我的控件可以實現INotifyDataErrorInfo,但問題是空值甚至沒有將它放到我的控件中,因爲我的DateTime不是可空的,所以沒有什麼可以驗證。

我可以輕鬆地做這件事情,沒有任何約束。或者通過綁定到我的控件中的一個隱藏的可爲空的Nulllable屬性,驗證此屬性是否爲空,並且公開另一個DateTime屬性。或者通過提供一個將null轉換爲DateTime.MinValue或其他東西的ValueConverter。

但是,這些方法似乎都是解決方法,我想要一個更好的解決方案。處理這個問題的最好方法是什麼?

回答

1

儘管null不是有效值,但您基本上必須將您綁定DatePicker的值設置爲可爲null的DateTime。

然後,你只需要依靠你的驗證邏輯來​​確保你的應用程序永遠不會允許值被處理/存儲/任何它的值爲空。