为了账号安全,请及时绑定邮箱和手机立即绑定

文本框绑定到 uint - 用户输入验证

文本框绑定到 uint - 用户输入验证

C#
翻翻过去那场雪 2021-11-21 16:05:49
我有 4 个带有“提交”按钮的用户输入,如下所示:for Texboxes 绑定到视图模型中的 uint 变量并使用“标准”OnPropertyChanged()方式,例如:    /// <summary>    /// Width of the exported image    /// </summary>    public uint ImageExportWidth    {        get { return imageExportWidth; }        set        {            if (value > 0 && value < 10000)            {               imageExportWidth = value;            }            else            {                GuiCommons.ModernDialogShowMessage(GeneralDefines.SizeNotSupported, DefOmegaMessageBox.OmegaException);            }            OnPropertyChanged("ImageExportWidth");        }    }如果用户按下提交按钮,这些值将写入一个 init 文件,该文件稍后用于导出过程。如果现在输入无效,则视图模型中的值已经没有更新并且 GUI 中的反馈如下所示:现在,我有以下两个问题:因为,转换检查(到 uint)不是由我的代码完成的,我猜这是一个自动化的 .NET 事情?这是否足够/好的做法,还是我必须自己对输入进行额外检查?如果输入无效并且用户按下提交按钮,我想将 GUI 中的文本框更新为最后一个有效值(我仍然保存在相应的视图模型属性中)。使用已经到位的数据绑定来做到这一点的最佳方法是什么?
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

因为,转换检查(到 uint)不是由我的代码完成的,我猜这是一个自动化的 .NET 事情?

嗯,是的,您不能将uint属性设置为有效值以外的任何其他uint值。当您尝试执行此操作时,WPF 绑定引擎将捕获异常。

这是否足够/好的做法,还是我必须自己对输入进行额外检查?

如果需要,您可以使用 a 自定义“值...无法转换”消息ValidationRule,但不应更改源属性的类型。

如果输入无效并且用户按下提交按钮,我想将 GUI 中的文本框更新为最后一个有效值(我仍然保存在相应的视图模型属性中)。使用已经到位的数据绑定来做到这一点的最佳方法是什么?

PropertyChangedExecute绑定到 的命令的方法中引发源属性的事件Button


查看完整回答
反对 回复 2021-11-21
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我发现最好的解决方案是让 ViewModel 用字符串属性包装整数字段,并在设置新值时使用 int.TryParse 来验证它。

否则您无法验证 TextBox,因为无效值无法发送到 ViewModel,因此您不了解它们。

这是一个常见问题,您可以通过搜索 INotifyDataErrorInfo 找到更多信息(验证后应该如何显示错误消息)


查看完整回答
反对 回复 2021-11-21
  • 2 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信