在我的MVVM项目中,我有两个文本框,其中一个文本框绑定到我的对象的可空整数字段,另一个绑定到字符串字段。当视图加载时,如果我向绑定到字符串属性的文本框输入任何值,我可以看到它的值更新为对象的字符串属性。
但是,当我输入一个绑定到我的对象的可空整数字段的文本框的值时,就会出现问题。如果它是一个正确的整数值,则值会更新。如果我在文本框中放置一个字母数字字符串绑定到我的对象的可空整数字段,或者如果我将其留空,则我的对象的可空整数字段不会更新。它仍然保留了之前设置的内容。
例如。如果我在数字文本框中输入数字'7',它将更新为7.现在如果我将其从'7'更改为'7a'或'a7'或'asd'或将其留空。该值仍然保持为7,这是较早的值。
除了更改可空类型之外,还有任何解决此问题的方法吗?
感谢您的时间......
答案 0 :(得分:5)
如果您的文本框被屏蔽为仅接受数值,您还可以使用:
Text = {Binding PropertyName,Mode = TwoWay,TargetNullValue =''}
这会正确设置绑定的int吗?检测到空字符串时,属性为null。
答案 1 :(得分:2)
问题在于,只要您在empty string
中alphabet values
或TextBox
中绑定Nullable<Int32>
,就不会设置nullable int的值。
在这种情况下,将字符串值转换为整数值时绑定失败。失败后,它不会将值设置为null,而只是保留旧值。您可以通过调试确保这一点。
您可以采取的措施是创建一个转换器。此转换器尝试将字符串值转换为int,如果无法执行此操作,则返回null,该值将设置为nullable int的值。