文本框上整数数据类型的 PoCo 验证

发布于 2025-01-02 10:05:44 字数 198 浏览 3 评论 0原文

我正在开发一个 WPF 应用程序,其中使用绑定到 POCO 实体的 int 字段的文本框,当我清除文本框时,我希望当前对象无效,因为这是一个不可为 null 的字段。

但问题是,当我清除文本框时,它会转换为 string.empty ,无法设置为 int 值,因此我的 int 字段永远不会更新,并且我的对象仍然有效。

请对此提出一些合理的解决方案。

I am developing a WPF application in which i am using a textbox that is bind to an int field of my POCO entity, when i clear the textbox i want my currentobject to be invalid as this is a non nullable field.

But the thing is when i clear my textbox, it convert to string.empty that can ot be set to an int value, so my int field never gets updated and my object remains Valid.

Kindly suggest some logical solution to this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

柏林苍穹下 2025-01-09 10:05:44

一种方法是绑定到字符串值(如果您不想污染模型,可能会添加到视图模型中),然后在字符串属性的 setter 中,将字符串转换为整数以存储在 int 上财产。

One approach is to bind to a string value instead (probably added to a view model if you don't want to pollute your model), and then in the setter for the string property, convert the string to an integer to store on your int property.

予囚 2025-01-09 10:05:44

正如我所见,您不应该能够为 int 控件设置“空”值。
也许您可以使用 扩展 WPF 工具包 中的 IntegerUpDown 控件,它允许您提供水印,用于显示文本来代替 NULL 值或设置默认值(可以是 0)。

它还有按钮微调器,可以根据需要隐藏。

As i see it, you should not be able to set an 'empty' value to an int control.
Maybe you could use the IntegerUpDown control in the Extended WPF Toolkit which allows you to provide a watermark to show text in place of a NULL Value or set a default value, which could be 0.

It also has button spinners, which can be hidden if needed.

染柒℉ 2025-01-09 10:05:44

我从此处复制了我的答案。我希望它也对你有帮助。

如果您的视图模型具有 int 类型的属性,那么您的绑定只是
如果您的视图获得可转换为 int 的输入,则有效。否则
你的视图模型永远不会被告知。现在有两种方法:

首先:您确保您的视图只能接受数字输入(使用
您的数字文本框)并且 viewmodel 属性可以是 int。

或第二:您的视图模型属性类型是 typeof string 并且您使用
IDataErrorInfo 让视图知道输入何时不是数字。

i copied my answer from here. i hope it helps you too.

if your viewmodel has an Property of type int, then your binding just
works
if your view got input which is convertable to int. otherwise
your viewmodel will never be informed. there are 2 ways now:

first: you make sure that your view just can take numeric input (with
your numeric textbox) and the viewmodel property can be int.

or second: your viewmodel property type is typeof string and you use
IDataErrorInfo to let the view know when the input is not numeric.

孤星 2025-01-09 10:05:44

默认情况下,当发生验证错误时,WPF 应显示 ErrorTemplate,这包括由无效转换引起的验证错误,例如尝试将字符串字段存储在 int 中。 TextBox 的默认 ErrorTemplate 是红色边框,对于大多数用户来说,这表明某些内容不正确并且更改将不会保存。

如果您想要更多的东西,您可以尝试在绑定中使用 IValueConverter ,它会尝试将值转换为 int ,并返回 0 (或一些无效值) )如果失败,那么无论用户输入什么,您的对象都会更新一些内容。

By default WPF should display the ErrorTemplate when a validation error occurs, and this includes validation errors caused by invalid casts, such as trying to store a string field in an int. The default ErrorTemplate for a TextBox is a red border, and for most users this is an indication that something is incorrect and the changes will not get saved.

If you want something more than that, you could try using an IValueConverter in your binding which attempts to cast the value into a int, and will return 0 (or some invalid value) if it fails so your object will get updated with something no matter what the user enters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文