程序更改值时触发验证?

时间:2013-03-28 23:05:33

标签: wpf validation c#-4.0 datagrid triggers

程序更改值时触发验证?

我有一个数据网格,它有一个“状态”列。当用户单击一个按钮时,它会启动后台工作程序根据datagrid rows中的数据执行长处理:行循环,这是一个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>

1 个答案:

答案 0 :(得分:2)

您可以在ValidatesOnTargetUpdated上设置ValidationRule这将使其在目标媒体资源更新时进行验证。

示例:

<local:StatusValidationRule ValidatesOnTargetUpdated="True" />