WPF資料繫結的驗證方式作法有三種:
- 使用ValidationRules
- 使用ValidatesOnDataErrors
- 使用ValidatesOnDataException
這三種方式都是Bindng物件的屬性, 作法卻不大相同.
使用ValidationRules
必須建立一個類別並繼承ValidationRule, 在裡頭的Validate方法撰寫驗證程式碼.
然後在XAML上必須這樣寫:
<DatePicker Grid.Column="1" Grid.Row="2" Name="DatePicker1" >
<DatePicker.SelectedDate>
<Binding Path="CreationTime">
<Binding.ValidationRules>
<local:DateRangeValidationRule />
</Binding.ValidationRules>
</Binding>
</DatePicker.SelectedDate>
</DatePicker>
這是最早出現的作法(.net 3.0), 好處是驗證邏輯是獨立的類別可以重複使用, 缺點是太複雜了!!
***Silverlight 並不支援這種做法.***
使用ValidatesOnDataErrors
只要在資料來源的類別中實作IDataErrorInfo介面, 在Item索引子中實作檢查欄位驗證的邏輯.
然後只要設定Binding物件的ValidatesOnDataErrors屬性為True就會有效果.
.net 3.0sp1以後才有的功能. 好處是可以直接在資料來源的類別實作檢查欄位驗證的邏輯. 缺點是驗證邏輯無法重複使用 (不過驗證邏輯需要重複使用的機會有多少?).
***Silverlight有支援這種做法.***
使用ValidatesOnDataException
直接在資料來源的類別中的屬性的Set區段中撰寫驗證邏輯, 並在驗證發生問題時丟出錯誤(throw exception)
但在XAML中要設定ValidatesOnDataException為True及ValidationRules指為ValidatesOnExceptions.
<Binding Path="CreationTime" ValidatesOnDataException=True>
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
.net 3.0sp1以後才有的功能. 好處是類別的程式碼寫法比較直覺, 也不需實作任何介面. 缺點是還是要手動打XAML(Visual Studio 2010有Binding 的屬性視窗, 但並沒有ValidationRules的選項, 所以要自己打XAML)
***Silverlight有支援這種做法.***
沒有留言:
張貼留言