【问题标题】:Set of a Property is not being fired when ValidationRule returns false当 ValidationRule 返回 false 时,不会触发一组属性
【发布时间】:2011-06-22 14:06:33
【问题描述】:

我在文本框上有一个 ValidationRule。当 ValidationResult 返回 true 时,这会触发文本框绑定到的属性上的集合。

当 ValidationResult 返回 false 时,不会触发该集合。

任何关于它为什么不触发以及如何解决它的指针,非常感谢。

谢谢

这是文本框的 XAML:

<Binding Path="CorrectEntry" UpdateSourceTrigger="PropertyChanged"  NotifyOnValidationError="True" >
    <Binding.ValidationRules>
        <localValidation:CorrectEntryValidationRule x:Name="validator" ValidatesOnTargetUpdated="True">                                                   <localValidation:CorrectEntryValidationRule.RangeContainer>
                <localValidation:CorrectEntryRangeContainer
                    DataContext="{Binding 
                    Source={StaticResource DataContextBridge}, 
                    Path=DataContext}" 
                    Min="{Binding Lower}"
                    Max="{Binding Upper}"
                    />
                </localValidation:CorrectEntryValidationRule.RangeContainer>
            </localValidation:CorrectEntryValidationRule>
    </Binding.ValidationRules>
</Binding>

【问题讨论】:

    标签: wpf xaml data-binding validation


    【解决方案1】:

    请参阅验证规则的文档。当验证规则返回 false 时,不会设置属性是设计使然。

    如果您希望设置属性,则不应使用验证规则。您应该从 IDataErrorInfo 继承您的类。并从该接口实现 2 个方法。

    【讨论】:

      【解决方案2】:

      这是正常且通常需要的行为,如果您的数据无效,您不希望将其保存在模型中。

      (如果您想通过 setter 中抛出的异常进行验证,您可以使用 a property on the binding

      【讨论】:

      • 谢谢 H.B,我需要触发属性上的 Set,因为它包含 OnPropertyChanged... 在我的表单上,我有一个绑定到 IsValid 标志的 Ok 按钮,应该禁用 - 当我的 TextBox 有一个无效条目......这通常很简单,但我使用 Josh Smith 的方法绑定 DataContext 中的值:codeproject.com/KB/WPF/…
      • 如果您还使用 ValidationRules,则为此使用标志可能不是一个好主意;在这种情况下,我可能会在 IsEnabled 属性上使用多重绑定,该属性直接绑定到所有控件的验证状态。
      猜你喜欢
      • 2020-08-08
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多