Nie otrzymuję zachowania, którego oczekiwałbym od obiektu TextBox powiązanego z właściwością całkowitą w obiekcie biznesowym.Anulowanie sprawdzania poprawności zdarzenia kontroli danych nie blokuje próby zaktualizowania źródła danych
Oto co zrobiłem:
(1) Ustaw DataSourceUpdateMode
dla TextBox do: OnValidation
.
(2) W zdarzeniu dla TextBox, ustaw e.Cancel = True
, jeśli wartość Integer.TryParse nie powiedzie się.
(3) Dodaj handler'a do Binding.Parse
i Binding.BindingComplete
i umieść punkty przerwania w modułach obsługi.
Uruchom aplikację, umieść "asdasd" w polu tekstowym i na karcie. Mimo ustawienia e.Cancel = True
, oba zdarzenia: Parse
i BindingComplete
. Zgodnie z dokumentacją ustawienie e.Cancel = True
powinno powstrzymać dalszą logikę.
Szukałem MSDN, aby dowiedzieć się, dlaczego tak się dzieje, ale nie mogę znaleźć niczego. Czy ktoś wie, gdzie mogę podać szczegółowe informacje?
ETA: Dodałem również uchwyt do zdarzenia Walidowane. Oto sekwencja zdarzeń:
Bad dane:
(1) zatwierdzanie. (Ustawić e.Cancel = True
)
(2) Przetwarza
(3) BindingComplete
dobre dane:
(1) Weryfikacja
(2) Przetwarza
(3) BindingComplete
(4) Zatwierdzony
ETA2: Trochę więcej informacji i obejść.
Problem z tym zachowaniem polega na sprawdzeniu poprawności, która nie jest zaimplementowana w ustawieniu właściwości.
Na przykład, powiedzmy, że moja właściwość całkowita musi być liczbą nieparzystą. Nie sprawdzam tego w ustawieniach własności, więc sprawdzam w zdarzeniu walidującym.
Jak widać, z powyższego zachowania wartość, jako poprawna liczba całkowita, zostanie zapisana w źródle danych, nawet jeśli anuluję sprawdzanie poprawności.
Mimo że źródło danych zostało zaktualizowane, jeśli ustawisz Anuluj w zdarzeniu walidującym, zdarzenie Sprawdzane nie zostanie uruchomione, więc nadal możesz uniemożliwić postęp użytkownika.
obejście ::
Aby zatrzymać aktualizacji źródła danych, trzeba zweryfikować w przypadku Binding.Parse
, a wyjątek - co zapobiega wiązaniu ukończenie pomyślnie.
dobre znalezisko. [Wygląda jak błąd WinForm] [1]. [1]: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=490267 –
Pozdrawiam, zgodziłem się na błąd i dodałem pracę. – Jules