poniedziałek, 27 sierpnia 2012

[WPF] ValidationRule

Bindując się do kontrolek interfejsu użytkownika, powinno się z góry założyć, że wprowadzone mogą zostać niepoprawne dane. W niektórych przypadkach możemy takie dane przyjąć, a w innych możemy wymusić na użytkowniku wpisanie poprawnych danych. Pomocne w tym przypadku stają się reguły walidacyjne. Reguła walidacyjna jest warstwą pomiędzy źródłem i celem bindingu, która zawiera logikę sprawdzającą poprawność danych.

Aby zbudować swoją regułą, wystarczy stworzyć klasę dziedziczącą po ValidationRule.

 public class EmailValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            Debug.WriteLine("Validation Rule Active : " + value.ToString());
            var str = value.ToString();
            Regex regex = new Regex(@"^([\w.-]+)@([\w-]+)((.(\w){2,3})+)$",RegexOptions.IgnoreCase);
            var match = regex.Match(str);
            return match.Success ? new ValidationResult(true, null) : 
                new ValidationResult(false, "Email Address is not valid");
        }
    }

A następnie dodać instancję, do databindingu.

<TextBox Name="textBox8" >
    <TextBox.Text>
        <Binding>
            <Binding.ElementName>
                main
            </Binding.ElementName>
            <Binding.Path>
                Email
            </Binding.Path>
            <Binding.ValidationRules>
                <local:EmailValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Metoda Validate wywoła się w momencie próby aktualizacji źródła danych w przypadku Bindingu OneWay.

Brak komentarzy:

Prześlij komentarz