我有一个使用 MVVM 的 WPF 应用程序。 我正在使用绑定(bind)到 POCO 对象。
文本框绑定(bind)到对象中的属性,例如:
<TextBox.Text>
<Binding Path="CertainProperty" Mode="TwoWay" >
<Binding.ValidationRules>
<ExceptionValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
现在这个属性是一个 int 属性,当用户试图输入一个非数字值时,他们会得到“输入字符串的格式不正确”。 我需要做的是将此消息自定义为对用户更友好的消息。
我该怎么做?
请您参考如下方法:
不幸的是,该异常及其消息源自框架代码的深处,无法简单地换出。但是您可以做的一件事是通过编写您自己的 ValidationRule
来完全规避异常。例如:
public class Int32ValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (string.IsNullOrEmpty((string)value))
return ValidationResult.ValidResult;
int number;
return int.TryParse(value.ToString(), out number)
? ValidationResult.ValidResult
: new ValidationResult(false, "Please enter a valid integer");
}
}
当然,核心选项是将 CertainProperty
转换为 string
并让您的 View 模型或模型通过 IDataErrorInfo
验证它,但是将是对现有代码的重大更改。