【问题标题】:Custom ValidationRules inside Expander.Header Binding not firingExpander.Header 绑定中的自定义 ValidationRules 未触发
【发布时间】:2012-12-06 11:09:37
【问题描述】:

当自定义 ValidationRule 与 Expander.Header 绑定关联时,我无法触发它。事实上,我似乎可以让这些自定义规则触发的唯一地方是在 DataGrid.RowValidationRules 块中......

扩展器在我的 Window XAML 文件中定义,如下所示;

<Expander Style="{StaticResource ValidatedSecondLevelExpanderStyle}">
    <Expander.Header>
        <Binding Path="Name" Mode="OneWay" ValidatesOnDataErrors="True" NotifyOnValidationError="True">
            <Binding.ValidationRules>
                <ValidationRules:BoundObjectIsValid />
            </Binding.ValidationRules>
        </Binding>
    </Expander.Header>
</Expander>

绑定属性“名称”显示正确,但未调用验证规则“BoundObjectIsValid”。这可能吗?如果可以,我错过了什么?

我知道我可以交替地在绑定对象上实现 IDataErrorInfo,但是如果没有系统其他部分提供的某些上下文,该对象无法合理地验证自己。重构是可能的,但我希望首先让 ValidationRules 起作用!

【问题讨论】:

    标签: c# wpf binding validationrules


    【解决方案1】:

    请参阅msdn

    绑定引擎每次将输入值(即绑定目标属性值)传输到绑定源属性时,都会检查与绑定关联的每个 ValidationRule。

    因此,在您的情况下,您没有将输入值传输到源属性,因为您的 Expander.header 不是可用于输入值的控件。

    编辑: 但是在 ValidationRule 中有一个名为 ValidatesOnTargetUpdated' 的属性。设置为 true 时,将在更新目标属性时应用验证规则

    【讨论】:

    • 我已经让 DataGrid 在显示行时对其进行验证 - 用户未更改。我认为有一种方法可以使用任何绑定来做到这一点,因为它是一个可用的设置......?
    • @RJLohan 您可以尝试将 ValidationRule 的属性 'ValidatesOnTargetUpdated' 设置为 true。我才发现有这样的财产。希望这会有所帮助。
    • 看起来这个属性有所不同,但不知道为什么,因为它不适用于其他情况。
    猜你喜欢
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多