Czasami podczas wprowadzania danych zachodzi potrzeba ich walidacji (a w zasadzie zawsze jest). W tym odcinku zobaczymy jak możemy takie reguły walidacyjne do naszego interface’u. Możemy to zrobić na dwa sposoby. Pierwszy z nich to napisanie własnej metody walidacji, drugi to przekazanie wszystkich wystąpionych wyjątków jako elementów systemu walidacji. Zobaczmy to na przykładach. Aby napisać nową klasę walidacji jedyne co musimy zrobić to napisać nową klasę, która dziedziczy po klasie ValidationRule. Najprostsza klasa ma postać:

public class AlwaysFailingValidationRule : ValidationRule

{

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)

    {

        return new ValidationResult(false, “Always failing”);

    }

}

Ta prosta reguła zawsze będzie zwracać fałsz przy walidacji danych. Jak tego użyć w XAMLu?

<TextBox x:Name=”f” />

<TextBox x:Name=”fileName”>

    <TextBox.Text>

        <Binding Path=”Text” ElementName=”f” Mode=”TwoWay”>

            <Binding.ValidationRules>

                <local:AlwaysFailingValidationRule />

            Binding.ValidationRules>

        Binding>

    TextBox.Text>           

TextBox>

Metoda ta jest wywoływana jeszcze przed przekazaniem danej do ewentualnego konwertera. Jeśli chcemy “upiększyć” wygląd kontrolki w przypadku błędu, możemy to zrobić definiując wygląd tego stanu w elemencie Validation.ErrorTemplate.

Wyjątki

Możemy też skorzystać w dostarczanego wraz z WPF elementu

<ExceptionValidationRule />

W takim przypadku wysztkie wyjątki jakie się pojawią będą traktowane jako złamanie reguł walidacji.

Klasa Binding

Jeśli tworzymy binding z kodu, możemy posłużyć się właściwością UpdateSourceExceptionFilter i w nim wpiąć trochę kodu, odpowiedzialnego za logikę.

Następnym razem będzie o stylach w WPF.