2008-09-25 25 views
5

Używamy standardowej metody dla naszych kontroli do zgłaszania złamanych reguł BO. Odbywa się to poprzez interfejs IDataError w naszych BO iw XAML kontrola jest związana z własnością BO itp. To podejście działa OK. Musimy jednak pokazać 2 typy wizualizacji w interfejsie użytkownika w zależności od typu (lub kategorii, jeśli chcesz) błędu unieważnienia. Jeśli jest to wymagane pole, wyświetlamy CueBanner (znak wodny), ale w przypadku innych typów zmienimy kolor kontrolki. W obu scenariuszach ustawiamy typ narzędzia komunikatu o błędzie.Czy to jest szalony sposób obsługi wielu typów sprawdzania poprawności za pomocą IDataError i WPF?

Problem z IDataError polega na tym, że nie obsługuje metody/właściwości w celu rozróżnienia typów błędów.

Jedyny sposób, w jaki mogę to zrobić, poprzez sprawdzenie tekstu błędu, wymagane pole tekstowe musi zawierać słowo kluczowe "wymagane". Poniższe podejście nie jest właściwe, ale jest to jedyny sposób, w jaki mogę określić typ błędu, a następnie odpowiednio go rozwiązać. Wszystkie wymagane reguły pola muszą być częścią tekstu błędu "wymagane pole". Aby to wszystko działało, utworzyłem niestandardową właściwość zależności o nazwie ErrorMessage. W moim ResourceDictionary mam Style.Trigger dla Validation.HasError. Tam ustawiłem wartość właściwości zależności na ErrorContent. Teraz, gdy zmieniają się wartości właściwości zależności, mogę sprawdzić tekst i ustawić Validation.SetErrorTemplate (myControl, newErrorTemplate) na szablon, aby dopasować go do typu błędu. Muszę podłączyć kilka zdarzeń do kontroli, takich jak utracone i skupić się na usuwaniu lub dodawaniu szablonu cueBanner, ale wszystko będzie działać. Po prostu nie jestem pewien, czy to najlepszy sposób na zrobienie tego.

PS. Kiedy ustawiam ErrorTemplate robię to w kodzie, to buduję i dodaje. Czy istnieje sposób, aby wskazać Validation.SetErrorTemplate do statycznego zasobu pamiętając, że muszę przełączać się między co najmniej 2 typy?

Twoje myśli proszę ..

Odpowiedz

3

byłoby możliwe, aby wyznaczyć IDataError interfejsu, który dodaje dodatkową właściwość, która stanowi wyliczenie rodzaju błędu. Wtedy możesz spróbować się z nim związać.

+0

Nie sądzę, że dodatkowa właściwość jest dostępna z szablonu błędu. DataContext z ErrorTemplate to kolekcja Validation.Errors. –

0

Jeśli masz problemy z (nietestowanym) podejściem, które jest trochę klarowne, możesz wykonać następujące czynności: wyślij wyjątek zamiast zwracać ciąg z interfejsem IDataErrorInfo. W ErrorTemplate, można uzyskać dostęp do ValidationErrors (i ValidationError.Exception Property).

Następnie należy użyć DataTrigger na Exception w połączeniu z konwerterem, który sprawdza odpowiedni typ wyjątku i zwraca wartość true lub false. Powinno wystarczyć do wykonania pracy.