Comment : implémenter une logique de validation sur des objets personnalisés
Cet exemple montre comment implémenter une logique de validation sur un objet personnalisé, puis créer une liaison avec lui.
Exemple
Vous pouvez fournir une logique de validation sur la couche métier si votre objet source implémente IDataErrorInfo, comme dans l'exemple suivant :
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
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;
}
}
}
Dans l'exemple suivant, la propriété Texte de la zone de texte crée une liaison avec la propriété Age de l'objet Person, dont on a fait en sorte qu'il soit disponible pour une liaison via une déclaration de ressource qui reçoit le x:Keydata. DataErrorValidationRule recherche les erreurs de validation déclenchées par l'implémentation IDataErrorInfo.
<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>
Au lieu d'utiliser le DataErrorValidationRule, vous pouvez affecter à la propriété ValidatesOnDataErrors la valeur true.
Voir aussi
Tâches
Comment : implémenter la validation de la liaison