【问题标题】:Raise Validation.Error without NotifyOnValidationError. Is posible?在没有 NotifyOnValidationError 的情况下引发 Validation.Error。有可能吗?
【发布时间】:2015-09-22 00:49:52
【问题描述】:

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

或者

当红色验证边框显示或隐藏时,是否有另一个事件总是引发?

说明:

我有一个附加行为,它在 Validation.GetHasError 和我的 ViewModel 的属性之间建立了绑定。这是为了在视图模型端知道何时发生了视图端验证。

示例:具有 int 属性的视图模型

class ViewModel
{
    int Value { get; set; }
}

一个文本框:

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

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

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

【问题讨论】:

标签: c# wpf validation mvvm


【解决方案1】:

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" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2019-10-27
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多