我将我的WPF表单绑定到类的Decimal属性。如果用户输入无效格式(字符串而不是十进制),文本框将自动以红色突出显示。但是,我想通过在将插入的数据存储到数据库之前进行验证来使其更安全。
问题是,每当用户输入非十进制值时,绑定将返回0而不是null或错误。所以它设法进入数据库而没有第二级验证。
验证WPF绑定到小数的最佳方法是什么?现在它不会返回null,所以我没有办法捕获错误。
以下是我绑定文本框的方式
<TextBox x:Name="stockTxtBx" Grid.Row="3" Grid.Column="1" Style="{StaticResource StandardBox}" Text="{Binding StockOnHand}"/>
另外,我可以在哪里修改以添加验证?
答案 0 :(得分:2)
问题是,每当用户输入非十进制值时,绑定将返回0而不是null或错误
您在上述陈述中略有不正确。当用户输入某些特定字段的无效类型的文本时,实际会发生什么:
ErrorTemplate
TextBox
值)
因此,在您的情况下,最后一个有效值可能为0
,这就是您认为无效值始终返回0
的原因。所以实际上,只忽略无效值,而最后一个有效值仍然存在。
但是,要改善此问题,您有几种选择。一种方法是在保存数据之前检查Validation.HasError
Attached Property 的值。显然,如果您检测到存在任何错误,则会弹出消息以提醒用户,而不是继续保存。您可以从Binding Validation.HasError property in MVVM问题中找到有关此方法的更多信息。
另一种选择是限制特定TextBox
的文本输入,以便无法输入非数字键。我不会在这里再详细介绍如何再次执行此操作,而是更愿意请求您查看Numeric Data Entry in WPF问题的答案,此处为Stack Overflow。