【问题标题】:Trigger validation when the value is changed by program?当程序更改值时触发验证?
【发布时间】:2013-03-28 23:05:32
【问题描述】:

当值被程序改变时触发验证?

我有一个数据网格,它有一列“状态”。当用户单击一个按钮时,它会启动一个后台工作程序,根据数据网格行中的数据进行长时间处理:为行循环,这是一个 ObservableCollection 。对于一行,它将报告处理状态并将其显示在“状态”列中(作为字符串)。有时,“状态”会包含如下文本:

错误:.... 警告:...

我想根据状态文本更改状态单元格背景,即红色表示错误,灰色表示警告...

我可以通过使用验证来做到这一点吗?我在下面编码。如果我手动更改状态文本,它会像我想要的那样工作。 local:StatusValidationRule 检查它是否有错误。但是,这不起作用,因为状态文本由程序更改,这不会触发验证。

有什么建议吗?谢谢。

<DataGridTextColumn Header="Status" Width="200" CanUserResize="True"> 

    <DataGridTextColumn.Binding>
        <Binding Path="Status" ValidatesOnExceptions="True" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:StatusValidationRule  ValidationStep="UpdatedValue"/>
            </Binding.ValidationRules>
        </Binding>
    </DataGridTextColumn.Binding>

    <DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="TextWrapping" Value="Wrap">
            </Setter>

            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="Background"
Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.ElementStyle>

</DataGridTextColumn>

【问题讨论】:

  • 您是否尝试将验证器设置为&lt;local:StatusValidationRule ValidatesOnTargetUpdated="True",这应该会导致它在目标属性更新时验证
  • 谢谢,回答了问题。你可以回复它作为答案,所以我可以接受吗?再次感谢。

标签: wpf validation c#-4.0 datagrid triggers


【解决方案1】:

您可以在ValidationRule 上设置ValidatesOnTargetUpdated,这将使其在目标属性更新时验证。

例子:

<local:StatusValidationRule ValidatesOnTargetUpdated="True" />

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    相关资源
    最近更新 更多