在WPF绑定中设置十进制属性的默认值

时间:2014-06-23 09:45:32

标签: c# wpf mvvm

我将我的WPF表单绑定到类的Decimal属性。如果用户输入无效格式(字符串而不是十进制),文本框将自动以红色突出显示。但是,我想通过在将插入的数据存储到数据库之前进行验证来使其更安全。

问题是,每当用户输入非十进制值时,绑定将返回0而不是null或错误。所以它设法进入数据库而没有第二级验证。

验证WPF绑定到小数的最佳方法是什么?现在它不会返回null,所以我没有办法捕获错误。

以下是我绑定文本框的方式

        <TextBox x:Name="stockTxtBx" Grid.Row="3" Grid.Column="1"  Style="{StaticResource StandardBox}" Text="{Binding StockOnHand}"/>

另外,我可以在哪里修改以添加验证?

1 个答案:

答案 0 :(得分:2)

  

问题是,每当用户输入非十进制值时,绑定将返回0而不是null或错误

您在上述陈述中略有不正确。当用户输入某些特定字段的无效类型的文本时,实际会发生什么:

  1. 无效文字会在ErrorTemplate
  2. 周围显示红色边框(或其他装饰,具体取决于TextBox值)
  3. 数据绑定属性值保留在输入的最后有效
  4. 因此,在您的情况下,最后一个有效值可能0,这就是您认为无效值始终返回0的原因。所以实际上,只忽略无效值,而最后一个有效值仍然存在。

    但是,要改善此问题,您有几种选择。一种方法是在保存数据之前检查Validation.HasError Attached Property 的值。显然,如果您检测到存在任何错误,则会弹出消息以提醒用户,而不是继续保存。您可以从Binding Validation.HasError property in MVVM问题中找到有关此方法的更多信息。

    另一种选择是限制特定TextBox的文本输入,以便无法输入非数字键。我不会在这里再详细介绍如何再次执行此操作,而是更愿意请求您查看Numeric Data Entry in WPF问题的答案,此处为Stack Overflow。