Walidacja IDataErrorInfo

0

Witam,

próbuję zrobić walidację pól formularza korzystając z implementacji IDataErrorInfo przez ViewModel, lecz mam pewien problem. Od razu zaznaczę, że w oknie, gdzie do textboxa binduję property typu string to wszystko działa. Problem mam, gdyż w ViewModelu mam:

private ClientDTO client;
        public ClientDTO Client
        {
            get { return client; }
            set { SetProperty(ref client, value); }
        }

I do Textboxów binduję to jak poniżej. Podam już kod gotowy, z elementami do walidacji.

<TextBox HorizontalAlignment="Left" Height="23" Margin="465,73,0,0" TextWrapping="Wrap" Text="{Binding Path=Client.Email, ValidatesOnDataErrors=True, 
                    UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}" VerticalAlignment="Top" Width="185"/>

Jak widac bindowane jest Client.Email.

Dodatkowo mam taki kod w ViewModelu:

public string this[string columnName]
        {
            get
            {
                if (columnName == "Email" && this.Client.Email.IsValidEmailAddress())
                {
                    return "Niepoprawny format adresu email";
                }

                return null;
            }
        }

        public string Error { get; }

I generalnie, dla pola typu string działa, tutaj nie chce. CO do ifa, to próbowałem porównywać columnName do Client.Email, do Client, a także używać Contains i niestety brak reakcji. Prosze o pomoc.

1

Ty walidujesz klasę ClientDTO czy ViewModel ? W Twoim przypadku powinieneś zaimplementować interfejs IDataErrorInfo w klasie ClientDTO.

0

Hmm, faktycznie, nie pomyślałem o tym. Dzięki za pomoc!

0

Ok, zrobiłem taką walidację. Jednak jak zrobić tak, aby nie móc zapisać formularza jeśli są jakieś błędy? Szukam i szukam i nic nie działa... Może być blokowanie zapisu z poziomu ViewModelu dla tego okna, jakiś if po naciśnięciu buttona, a może być dezaktywacja buttona jeśli walidacja się nie udała. Jeśli miałbym pola w ViewModelu i je bezpośrednio walidował to by pewnie działało, a psuje mi to, że walidację mam na obiekcie ClientDTO... Może ktoś ma jakiś pomysł?

1 użytkowników online, w tym zalogowanych: 0, gości: 1