【问题标题】:WPF validation - ValidatesOnTargetUpdatedWPF 验证 - ValidatesOnTargetUpdated
【发布时间】:2011-08-21 21:07:26
【问题描述】:

我在一个 WPF 应用程序中有许多文本框,我在这些应用程序上设置了一些验证。

在加载时,应用程序会反序列化 WPF 窗口控件所绑定到的类。

我有一个 ValidationRule(例如)测试文件是否存在。如果我没有设置 ValidatesOnTargetUpdated,那么当我更改(绑定)文本属性时,相应的 TextBox 会验证,我会看到(默认)红色边框出现,并且工具提示 ({Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}) 显示错误消息。

我希望控件在绑定而不是 propertychanged 上进行验证,因此我将 ValidatesOnTargetUpdated 设置为 true,并且可以在调试时看到 validationRule 触发。

我的问题是,在ValidatesOnTargetUpdated="True" 时忽略(默认)ValidationTemplate,尽管 ValidationRule 触发了。

我可以看到工具提示 - 它显示正确的错误消息,但边框未显示为红色;这似乎被忽略了。

任何想法为什么会发生这种情况?

【问题讨论】:

    标签: wpf validation textbox validationrules


    【解决方案1】:

    您可能想阅读此forum post。我相信与您的情况有关的部分是:

    问题:错误模板不是 页面加载时显示

    这是设计使然,因为可以 假设用户不想 在他/她做之前看到错误信息 任何错误,但有时需要 这个功能。所以 ValidatesOnTargetUpdated 属性为 在 ValidationRule 上介绍 班级;通过将其设置为 true,可以看到 立即验证结果。 但是,有一个警告:您必须 确保设置 DataContext 页面初始化后;这 要么在构造函数中 在生成的注释行之后 说初始化代码应该 去那里,或者在 Loaded 事件中。如果 你想设置 DataContext XAML,您找到了解决方案 这里的问题: http://wpfglue.wordpress.com/2009/12/08/navigating-from-object-to-object/

    不过,我听说这将在 WPF 4.0。

    编辑:

    可以找到更永久的链接here

    【讨论】:

    • 好的,谢谢你——对我来说很有意义。事情是我不知道该怎么做。绑定后是否有另一种强制验证方式?
    • 暂缓该请求 - 我决定对数据类进行自己的验证并绑定一个附加控件以指示有效性
    • 您提到如果要在 XAML 中设置 DataContext,有一个解决方案。我在提供的链接中看不到任何内容,这些内容显示了如何在调用 InitializeComponent 之前绕过正在设置的 DataContext(当我使用 XAML 设置 DataContext 时会发生这种情况)。您能否对此提供更明确的说明?
    • @KevinKalitowski - 这部分文字是从之前的论坛帖子链接中引用的。但是在 wpfglue 链接中,看起来他们实际上将 DataContext 设置为代码隐藏。所以我不确定在这种情况下你是否可以在 XAML 中设置 DataContext。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2018-01-14
    • 2013-02-18
    • 2014-08-18
    • 2011-01-06
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多