数据网格上的验证

本文关键字:验证 网格 数据网 数据 | 更新日期: 2024-11-07 01:26:14

我有一个数据网格在我的xaml中显示ObservableCollection。当"名称"字段为空时,我对其中一列的验证规则之一是"名称不能为空"。一切正常。

我的问题是,当我的"名称"字段验证被触发时(如果名称为空),"名称"字段用红色框勾勒出来。想象一下,在这个阶段,用户填写了一个名称,但即使您单击同一行的其他字段,红色框仍然存在。仅当用户单击其他行时,红色框才会消失。有没有办法使用户单击同一行的不同字段时红色框消失?

我的"名称"字段的 xaml 是

<Window.Resources>
    <Style x:Key="EditCellStyleError" TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
    </Style>
    <Style x:Key="CellStyleError" TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

"名称"字段

<DataGridTextColumn Header="Name" Binding="{Binding Name,ValidatesOnDataErrors=True, NotifyOnValidationError=True, ValidatesOnExceptions=True}" EditingElementStyle="{StaticResource EditCellStyleError}" ElementStyle="{StaticResource CellStyleError}"/>

数据网格上的验证

我认为您需要将UpdateSourceTrigger添加到绑定中

例如

<DataGridTextColumn Header="Name" 
  Binding="{Binding Name,ValidatesOnDataErrors=True, NotifyOnValidationError=True,
  ValidatesOnExceptions=True,  UpdateSourceTrigger=LostFocus}" />

这里我使用了LostFocus,但PropertyChanged可能是一个选择

UpdateSourceTrigger=PropertyChanged 绝对有帮助。另一个问题是去掉红色感叹号。为了实现这一点,我添加了一个空白的行验证模板

        <DataGrid.RowValidationErrorTemplate>
            <ControlTemplate>
            </ControlTemplate>
        </DataGrid.RowValidationErrorTemplate>