数据网格上的验证
本文关键字:验证 网格 数据网 数据 | 更新日期: 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>