在没有NotifyOnValidationError的情况下引发Validation.Error。可以吗?

时间:2015-09-22 00:49:52

标签: c# wpf validation mvvm

是否可以强制控件引发 Validation.Error 事件,即使绑定未指定 NotifyOnValidationError

或者

当显示或隐藏红色验证边框时,是否还会出现另一个事件?

解释

我有一个附加行为,它在 Validation.GetHasError 和我的ViewModel的属性之间进行绑定。这样做的目的是在视图模型方面了解View边验证的时间。

示例:具有 int 属性

的视图模型
class ViewModel
{
    int Value { get; set; }
}

文本框:

 <TextBox Text="{Binding Value}" Validation.Error="Validation_Handler" />

示例我想知道用户何时输入的值不是整数。

修改所有视图模型属性以使字符串类型并在ViewModel上完成所有验证是不可行的,因为某些ViewModel属性是在运行时动态生成的,我想保留默认的转换器行为

1 个答案:

答案 0 :(得分:0)

this问题

最简单的解决方案是继承 Binding 类,并在构造函数上将 NotifyOnValidationError 设置为true。这样就始终会触发 Validation.Error 事件。

public class Binding : System.Data.Binding
{
    public Binding(string path) : base(path)
    {
        NotifyOnValidationError = true;
    }
}

和XAML:

<TextBox Text="{ui:Binding Value}" Validation.Error="Validation_Handler" />

而不是:

<TextBox Text="{Binding Value, NotifyOnValidationError='True'}" Validation.Error="Validation_Handler" />