2011-01-05 3 views
5

W moim projekcie MVVM mam dwa pola tekstowe, z których jeden jest powiązany z zerowym polem całkowitym obiektu, a drugi z polem ciągu. Gdy widok ładuje się, jeśli wprowadzę dowolną wartość do pola tekstowego powiązanego z właściwością ciągu, widzę, że jego wartość jest aktualizowana do właściwości łańcucha obiektu.Wartości zerowe danych nie zostały zaktualizowane w Silverlight XAML

Jednak problem pojawia się, gdy wprowadziłem wartość do pola tekstowego, który jest powiązany z polem wartości zerowej całkowitych mojego obiektu. Jeśli jest to poprawna wartość całkowita, wówczas wartość zostanie zaktualizowana. Jeśli wstawię ciąg znaków alfanumerycznych w polu tekstowym związanym z polem zerowym całkowitym mojego obiektu lub po prostu zostawię go pustym, to pole wartości Nullable mojego obiektu nie zostanie zaktualizowane. Wciąż zachowuje to, co zostało ustawione wcześniej.

Na przykład. jeśli wprowadziłem liczbę "7" do pola liczbowego, zostanie ona zaktualizowana do 7. Teraz, jeśli zmienię ją z "7" na "7a" lub "a7" lub "asd", lub pozostawię ją pustą. Wartość nadal pozostaje jako 7, która była wcześniejszą wartością.

Czy praca dotyczy tylko tego problemu, poza zmianą typu zerowego?

Dzięki za poświęcony czas ...

Odpowiedz

1

problem polega na tym, gdy wpiszesz empty string lub alphabet values w twojej TextBox że jest związany z Nullable<Int32>, wartość wartości pustych int nie jest ustawiony.

W takim przypadku wiązanie nie powiedzie się, konwertując wartość ciągu na liczbę całkowitą. A po niepowodzeniu nie ustawia wartości na null, ale po prostu pozostawia starą wartość taką, jaka jest. Możesz się upewnić, że tak się dzieje przez debugowanie.

Co można zrobić, aby rozwiązać ten problem, należy utworzyć konwerter. Ten konwerter próbuje przekonwertować wartość ciągu na int, a gdy tego nie zrobi, zwróci wartość null, która zostanie ustawiona na wartość int nullable.

+0

Dzięki. Dodałem już konwerter. Problem z konwerterem polega jednak na tym, że zwróci wartość zerową, usuwając w ten sposób pole tekstowe. Chcę, aby użytkownik zobaczył, że wprowadził błędną wartość. Wyczyszczenie pola tekstowego nie pozwoli im na takie korzyści ... i będą musieli ponownie wpisać cały numer (jak w przypadku tych 16 cyfr, które wpisujesz czasem w formularzach) – user20358

6

Gdybyś Twój tekstowe zamaskowany przyjmować tylko wartości liczbowe można również użyć:

Text = {Binding PropertyName, Mode = TwoWay, TargetNullValue = ''}

To będzie prawidłowo ustawić związany int ? właściwość do wartości null, gdy wykryty zostanie pusty łańcuch.