2010年3月25日 星期四

WPF資料繫結的驗證方式

WPF資料繫結的驗證方式作法有三種:

  1. 使用ValidationRules
  2. 使用ValidatesOnDataErrors
  3. 使用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有支援這種做法.***

沒有留言:

張貼留言