我有一个在我的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}"/>
答案 0 :(得分:1)
我认为您需要将UpdateSourceTrigger添加到绑定
例如
<DataGridTextColumn Header="Name"
Binding="{Binding Name,ValidatesOnDataErrors=True, NotifyOnValidationError=True,
ValidatesOnExceptions=True, UpdateSourceTrigger=LostFocus}" />
这里我使用了LostFocus,但PropertyChanged可能是一个选项
答案 1 :(得分:0)
UpdateSourceTrigger = PropertyChanged肯定有帮助。另一个问题是摆脱红色感叹号。为此,我添加了一个空白的Rowvalidationtemplate
<DataGrid.RowValidationErrorTemplate>
<ControlTemplate>
</ControlTemplate>
</DataGrid.RowValidationErrorTemplate>