在WPF ValidatesOnException绑定中更改消息(或异常)

在WPF ValidatesOnException绑定中更改消息(或异常),wpf,validation,Wpf,Validation,我有一个使用MVVM的WPF应用程序。 我正在使用绑定到POCO对象 文本框绑定到对象中的属性,如: <TextBox.Text> <Binding Path="CertainProperty" Mode="TwoWay" > <Binding.ValidationRules> <ExceptionValidati

我有一个使用MVVM的WPF应用程序。 我正在使用绑定到POCO对象

文本框绑定到对象中的属性,如:

           <TextBox.Text>
                <Binding Path="CertainProperty" Mode="TwoWay" >
                    <Binding.ValidationRules>
                        <ExceptionValidationRule/>
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>

现在这个属性是一个int属性,当用户试图输入一个非数值时,他们得到“输入字符串格式不正确”。 我需要做的是将此消息自定义为更用户友好的消息


我怎样才能做到这一点呢?

不幸的是,该异常及其消息起源于框架代码的深处,不能简单地交换出去。但您可以做的一件事是通过编写自己的
验证规则
来完全绕过异常。例如:

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
转换为
字符串
,并让您的viewmodel或模型通过
IDataErrorInfo
对其进行验证,但这将是对现有代码的重大更改