我有 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 中的文本框更新为最后一个有效值(我仍然保存在相应的视图模型属性中)。使用已经到位的数据绑定来做到这一点的最佳方法是什么?
PropertyChanged
在Execute
绑定到 的命令的方法中引发源属性的事件Button
。
元芳怎么了
TA贡献1798条经验 获得超7个赞
我发现最好的解决方案是让 ViewModel 用字符串属性包装整数字段,并在设置新值时使用 int.TryParse 来验证它。
否则您无法验证 TextBox,因为无效值无法发送到 ViewModel,因此您不了解它们。
这是一个常见问题,您可以通过搜索 INotifyDataErrorInfo 找到更多信息(验证后应该如何显示错误消息)
- 2 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消