【问题标题】:Get any kind of validation error from WPF control从 WPF 控件获取任何类型的验证错误
【发布时间】:2015-07-27 18:13:54
【问题描述】:

我想从我的输入控件中获取任何验证错误。

到目前为止,我有几个视图模型都实现了ValidationViewModel,它实现了ViewModelBaseINotifyDataErrorInfoViewModelBase 实现 INotifyPropertyChanged。看看this link 我从哪里得到验证的想法。他和我的验证模型基本相同,但我的却一分为二。

按照设计,任何属性更改都会触发 propertychanged 事件,ValidationViewModel 会侦听该事件并执行所有自定义验证。这一切都很好。

这里的问题是只有在属性更改时才会进行验证...但是根据这个,很好,article 绑定引擎会执行验证规则并尝试在设置属性之前进行类型转换,这不会让我的验证着火。

假设一个文本框绑定到一个整数,其中用户输入了“a”作为示例。然后我留下一个红色边框。如何在此控件上捕获任何类型的验证错误?自定义和默认。

我的目标是在我的视图模型中出现任何错误时禁用保存按钮。

【问题讨论】:

    标签: c# wpf validation xaml


    【解决方案1】:

    您已将视图与视图模型分开。类型转换绑定错误纯粹是在视图方面。

    您可以使用Validation.Error附加路由事件来捕获任何绑定错误,但您必须将Binding集中的NotifyOnValidationError设置为true

    https://msdn.microsoft.com/en-us/library/system.windows.controls.validation.error(v=vs.110).aspx

    当发生绑定验证错误时,此事件会在可视化树中冒泡,因此您可以轻松捕获整个页面或用户控件

    您可以使用 Validation.HasError 和 Validation.Errors 附加属性来获取绑定错误。此外,熟悉 Validation.ErrorTemplate 以防您不熟悉

    【讨论】:

    • 好的,谢谢。当我有时间时会尝试并标记你的答案,如果它有效。我想我会先尝试冒泡,只需要找到好看的方法来实现它。
    • 基本上,要禁用按钮,请在您的 CanExecute 方法中调用 Validating 事件。在你看来,设置EventArgs.IsValid = Validation.GetHasError(this)
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多