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

本文关键字:属性 默认值 十进制 WPF 绑定 设置 | 更新日期: 2023-09-27 18:09:47

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

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

验证WPF绑定到十进制的最佳方法是什么?现在它不会返回null,所以我没有任何方法来捕获错误。

下面是我如何绑定文本框
        <TextBox x:Name="stockTxtBx" Grid.Row="3" Grid.Column="1"  Style="{StaticResource StandardBox}" Text="{Binding StockOnHand}"/>

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

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

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

你的上述陈述有一点不正确。当用户输入某些特定字段类型无效的文本时,实际发生的情况如下:
  1. 无效文本导致TextBox周围出现红色边框(或其他装饰取决于ErrorTemplate的值)
  2. 数据绑定属性值保持上次输入的有效

因此,在您的情况下,最后一个有效值可能0,这就是为什么您假设无效值总是返回0。因此,实际上,只有无效的值被忽略,而最后一个有效值保留。

然而,要改善这个问题,您有几个选择。一种方法是在保存数据之前检查Validation.HasError附加属性的值。显然,如果您检测到存在任何错误,那么您将弹出一条消息来提醒用户,而不是继续保存。您可以从绑定验证中找到有关此方法的更多信息。MVVM问题中的HasError属性。

另一个选项是限制特定TextBox的文本输入,这样就不可能输入非数字键。在这里,我不会再详细介绍如何做到这一点,而是希望您查看WPF中数字数据输入问题的答案,这里是堆栈溢出。