2011-01-05 7 views
5

MVVM projemde, biri nesnemin bir null tamsayı alanına ve diğeri bir dize alanına bağlanan iki metin kutusuna sahibim. Görünüm, ben string özelliğine bağlı metin kutusuna herhangi bir değer girersem yüklendiğinde, değerinin nesnenin string özelliğine güncellendiğini görebiliyorum.Databound null değerleri güncellenmemiş Silverlight XAML

Ancak, nesneyi null olmayan tamsayı alanına bağlı metin kutusuna bir değer girdiğimde sorun ortaya çıkıyor. Doğru bir tam sayı ise, değer güncellenir. Nesnemin nullable tamsayı alanına bağlı metin kutusuna alfasayısal bir dize koyarsam veya boş bırakırsam nesneyimin null girintili alanı güncellenmez. Hala daha önce ayarlanmış olan her şeyi korur. Örneğin,

. sayısal metin kutusuna '7' girersem 7'ye güncellenir. Eğer '7' den '7a' veya 'a7' veya 'asd' demek için değiştirirseniz veya boş bırakırsam. Değer hala önceki değer olan 7 olarak kalır.

NULL türünü değiştirmek dışında bu soruna geçici bir çözüm var mı? Eğer Nullable<Int32> bağlıdır senin TextBox içinde empty string veya alphabet values girdiğiniz durumlarda burada

cevap

1

Sorun zaman için

Teşekkür ..., null int değeri ayarlı değil.

Bu durumda, bir dize değerini bir tamsayı değerine dönüştürürken ciltleme başarısız olur. Başarısız olduktan sonra, değeri null değerine ayarlamaz, ancak eski değeri olduğu gibi bırakır. Bunun hata ayıklama ile gerçekleştiğinden emin olabilirsiniz.

Bunu çözmek için neler yapabileceğiniz dönüştürücü oluşturmaktır. Bu dönüştürücü, bir dize değerini int'ye dönüştürmeye çalışır ve bunu yapmadığında, null niçin int değerine ayarlanacak null değerini döndürür.

Metin = {Binding PropertyName, Mod = TwoWay, TargetNullValue = ''}

Bu doğru bağlanmış int ayarlayacaktır: Eğer metin kutusu için maskeli olsaydı

+0

Teşekkürler. Dönüştürücüyü çoktan ekledim. Ancak dönüştürücü ile ilgili problem, bir null döndürecek ve böylece metin kutusunu temizleyecektir. Kullanıcının yanlış bir değer girdiklerini görmesini istiyorum. Metin kutusunun temizlenmesi, onlara yarar sağlamasına izin vermez ... ve tüm sayıyı yeniden yazmaları gerekir (bazen formlara girdiğiniz 16+ hanede olduğu gibi) – user20358

6

yalnızca sayısal değerleri kabul de kullanabilirsiniz ? Boş bir dize algılandığında null özelliği.