Gewusst wie: Implementieren von Validierungslogik für benutzerdefinierte Objekte
In diesem Beispiel wird gezeigt, wie Sie Validierungslogik für ein benutzerdefiniertes Objekt implementieren und anschließend daran binden.
Beispiel
Sie können Validierungslogik auf der Geschäftsebene zur Verfügung stellen, wenn das Quellobjekt IDataErrorInfo implementiert, wie im folgenden Beispiel veranschaulicht:
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;
}
}
}
Im folgenden Beispiel wird die Texteigenschaft des Textfeldes an die Age-Eigenschaft des Person-Objekts gebunden, das für die Bindung über eine in x:Key data angegebene Ressourcendeklaration zur Verfügung gestellt wurde. DataErrorValidationRule sucht von der IDataErrorInfo-Implementierung ausgelöste Validierungsfehler.
<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>
Alternativ zur Verwendung von DataErrorValidationRule können Sie die ValidatesOnDataErrors-Eigenschaft auf true festlegen.
Siehe auch
Aufgaben
Gewusst wie: Implementieren der Bindungsvalidierung