Freigeben über


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

Referenz

ExceptionValidationRule

Weitere Ressourcen

Gewusst-wie-Themen zur Datenbindung