WPF使用IDataErrorInfo進行資料校驗
阿新 • • 發佈:2018-11-12
原文:
WPF使用IDataErrorInfo進行資料校驗
這篇部落格將介紹如何使用IDataErrorInfo進行資料校驗。下面直接看例子。一個Customer類,兩個屬性(FirstName, Age)
class Customer { public string FirstName { get; set; } public int Age { get; set; } }
將Customer類繼承IDataErrorInfo,並實現它的屬性。
classCustomer : System.ComponentModel.IDataErrorInfo { public string this[string columnName] { get { string result = string.Empty; if(columnName == "FirstName") { if(string.IsNullOrWhiteSpace(FirstName)) { result= "Name cannot null or empty."; } } else if(columnName == "Age") { if(Age < 0) { result = "Age cannot less then zero."; } }return result; } } public string Error { get { return null; } } public string FirstName { get; set; } public int Age { get; set; } }
在UI中繫結Customer的FirstName,Age屬性,並且當出現錯誤資料時觸發驗證。
<Window.Resources> <local:Customer x:Key="CustomerInstance" FirstName="Sam Bent" Age="24" /> <ControlTemplate x:Key="TextBoxErrorTemplate"> <Grid> <Border BorderBrush="Blue" BorderThickness="1"> <AdornedElementPlaceholder/> </Border> </Grid> </ControlTemplate> </Window.Resources> <StackPanel Margin="10"> <TextBox Text="{Binding Source={StaticResource CustomerInstance}, Path=FirstName, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" Validation.ErrorTemplate="{x:Null}" Margin="0,5" /> <TextBox Text="{Binding Source={StaticResource CustomerInstance}, Path=Age, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}"> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Style.Triggers> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="Background" Value="Red" /> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" /> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox> </StackPanel>
將Customer的FirstName與Age屬性分別繫結在兩個TextBox中,設定ValidatesOnDataErrors=True來觸發驗證。將錯誤資訊繫結在TextBox的ToolTip屬性上,
ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" 或者
ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"或者
<Style TargetType="{x:Type TextBox}"> <Style.Triggers> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="Background" Value="Red" /> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" /> </Trigger> </Style.Triggers> </Style>
另外可以對ErrorTemplate進行定製,例如上面程式碼中的TextBoxErrorTemplate。
執行結果:
程式碼點選這裡下載,感謝您的閱讀。