Mam bardzo prostą aplikację WPF, w której używam powiązania danych, aby umożliwić edycję niektórych niestandardowych obiektów CLR. Chcę teraz wprowadzić pewne sprawdzanie poprawności danych wejściowych, gdy użytkownik kliknie przycisk Zapisz. Jednak wszystkie książki WPF, które przeczytałem, nie poświęcają tak naprawdę miejsca temu zagadnieniu. Widzę, że możesz tworzyć niestandardowe reguły walidacji, ale zastanawiam się, czy nie byłoby to przesadą dla moich potrzeb.
Moje pytanie brzmi więc: czy jest gdzieś dobra przykładowa aplikacja lub artykuł, który demonstruje najlepsze praktyki sprawdzania poprawności danych wejściowych użytkownika w WPF?
.net
wpf
data-binding
validation
Mark Heath
źródło
źródło
Z dokumentacji MS wzorców i praktyk :
Dokumentacja wyjaśnia, jak zaimplementować IDataErrorInfo i INotifyDataErrorInfo.
źródło
personaly, używam wyjątków do obsługi walidacji. wymaga następujących kroków:
sztuczka polega na tym, aby wiązać się tylko z obiektami, które pochodzą z DependencyObject. prosta implementacja INotifyPropertyChanged nie zadziała - we frameworku jest błąd, który uniemożliwia dostęp do kolekcji błędów.
źródło
Przeczytaj również ten artykuł . Podobno Microsoft wydał swoją bibliotekę Enterprise Library (v4.0) na podstawie swoich wzorców i praktyk, w których obejmują one temat walidacji, ale Bóg wie, dlaczego nie uwzględnili walidacji dla WPF, więc post na blogu, do którego cię kieruję, wyjaśnia, co autor zrobił, aby go dostosować. Mam nadzieję że to pomoże!
źródło
Może Cię zainteresować przykładowa aplikacja BookLibrary platformy WPF Application Framework (WAF) . Pokazuje, jak używać walidacji w WPF i jak kontrolować przycisk Zapisz, gdy występują błędy walidacji.
źródło
Jeśli Twoja klasa biznesowa jest używana bezpośrednio przez interfejs użytkownika, lepiej jest użyć IDataErrorInfo, ponieważ zapewnia to logikę bliżej właściciela.
Jeśli klasa biznesowa jest klasą pośredniczącą utworzoną przez odwołanie do usługi WCF / XmlWeb, nie można / nie wolno używać IDataErrorInfo ani zgłaszać wyjątku do użytku z ExceptionValidationRule. Zamiast tego możesz:
źródło