【发布时间】:2018-08-09 12:10:41
【问题描述】:
我有 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 中的文本框更新为最后一个有效值(我仍然保存在相应的视图模型属性中)。使用已经到位的数据绑定来做到这一点的最佳方法是什么?
【问题讨论】:
-
For 1:这是基于异常的默认 WPF 验证规则。如果你对此感到满意,你就不需要更多了。对于 2:您可以为此使用
BindingGroup.CancelEdit(例如阅读 here)。 -
@dymanoid 我是否理解正确:这是在 xaml 的 Code-Behind .cs 文件中完成的,按下按钮调用我使用
BindingGroup.CancelEdit的函数?
标签: c# wpf validation data-binding