我正在开发一个WPF应用程序,其中我正在使用绑定到我的POCO实体的int字段的文本框,当我清除文本框时,我希望我的currentobject无效,因为这是一个不可为空的字段。
但问题是当我清除我的文本框时,它会转换为不能设置为int值的string.empty,所以我的int字段永远不会更新,我的对象仍然有效。
请为此提出一些合理的解决方案。
答案 0 :(得分:0)
一种方法是绑定到字符串值(如果您不想污染模型,可能会添加到视图模型中),然后在字符串属性的setter中,将字符串转换为要存储的整数在您的int属性。
答案 1 :(得分:0)
正如我所看到的,你不应该为int控件设置一个'empty'值。 也许您可以使用Extended WPF Toolkit中的 IntegerUpDown 控件,它允许您提供水印以显示文本代替NULL值或设置默认值,该值可以为0.
它还有按钮旋转器,可以在需要时隐藏。
答案 2 :(得分:0)
我从here复制了我的答案。我希望它对你也有帮助。
如果你的viewmodel有一个int类型的属性,那么绑定就是 如果您的视图获得可转换为int的输入,则可以。除此以外 您的viewmodel将永远不会被通知。现在有两种方法:
首先:确保您的视图可以采用数字输入(使用 您的数字文本框)和viewmodel属性可以是int。
或第二个:您的viewmodel属性类型是typeof字符串,您可以使用 IDataErrorInfo让视图知道输入何时不是数字。
答案 3 :(得分:0)
默认情况下,WPF应在发生验证错误时显示ErrorTemplate
,这包括由无效转换导致的验证错误,例如尝试在int
中存储字符串字段。 ErrorTemplate
的默认TextBox
是红色边框,对于大多数用户来说,这表示某些内容不正确,并且不会保存更改。
如果你想要更多的东西,你可以尝试在你的绑定中使用IValueConverter
来尝试将值转换为int
,如果它会返回0(或某些无效值)失败,因此无论用户输入什么内容,您的对象都会得到更新。