.NET Framework 4 - Windows Presentation Foundation
How to: Implement Validation Logic on Custom Objects
This example shows how to implement validation logic on a custom object and then bind to it.
Example
You can provide validation logic on the business layer if your source object implements IDataErrorInfo, as in the following example:
Visual Basic
Public Class Person Implements IDataErrorInfo Private _age As Integer Public Property Age() As Integer Get Return _age End Get Set(ByVal value As Integer) _age = value End Set End Property Public ReadOnly Property [Error]() As String Implements IDataErrorInfo.Error Get Return Nothing End Get End Property Default Public ReadOnly Property Item(ByVal columnName As String) As String Implements IDataErrorInfo.Item Get Dim result As String = Nothing If columnName = "Age" Then If Me._age < 0 OrElse Me._age > 150 Then result = "Age must not be less than 0 or greater than 150." End If End If Return result End Get End Property End Class
C#
public class Person : IDataErrorInfo { private int age; public int Age { get { return age; } set { age = value; } } public string Error { get { return null; } } public string this[string name] { get { string result = null; if (name == "Age") { if (this.age < 0 || this.age > 150) { result = "Age must not be less than 0 or greater than 150."; } } return result; } } }
In the following example, the text property of the text box binds to the Age property of the Person object, which has been made available for binding through a resource declaration that is given the x:Key data. The DataErrorValidationRule checks for the validation errors raised by the IDataErrorInfo implementation.
XAML
<TextBox Style="{StaticResource textBoxInError}"> <TextBox.Text> <!--By setting ValidatesOnExceptions to True, it checks for exceptions that are thrown during the update of the source property. An alternative syntax is to add <ExceptionValidationRule/> within the <Binding.ValidationRules> section.--> <Binding Path="Age" Source="{StaticResource data}" ValidatesOnExceptions="True" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <!--DataErrorValidationRule checks for validation errors raised by the IDataErrorInfo object.--> <!--Alternatively, you can set ValidationOnDataErrors="True" on the Binding.--> <DataErrorValidationRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox>
Alternatively, instead of using the DataErrorValidationRule, you can set the ValidatesOnDataErrors property to true.
See Also