我有一个DataGrid,它显示了一些东西。每个单元格都使用IDataErrorInfo接口对其进行验证。当用户将无效数据放入单元格时,验证将失败,并且用户将被提醒,包括单元格的背景变为红色,以及出现在行左侧的错误图标。当用户更正数据时,单元格的背景将恢复正常,但错误图标不会清除。即使我没有定义RowValidationErrorTemplate,也会发生这种情况。
<DataGrid AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Stretch" Name="dataGrid1" VerticalAlignment="Top" Width="Auto"
ItemsSource="{Binding Path=Records}" ColumnWidth="Auto" CanUserReorderColumns="False"
CanUserResizeColumns="False" SelectionUnit="Cell" CanUserAddRows="True">
<DataGrid.RowValidationRules>
<vm:TimeoutRecordRowValidation ValidationStep="UpdatedValue"/>
</DataGrid.RowValidationRules>
<DataGrid.RowValidationErrorTemplate>
<ControlTemplate>
<Grid ToolTip="{Binding RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type DataGridRow}},
Path=(Validation.Errors)[0].ErrorContent}">
<Ellipse StrokeThickness="0" Fill="Red"
Width="{TemplateBinding FontSize}"
Height="{TemplateBinding FontSize}" />
<TextBlock Text="!" FontSize="{TemplateBinding FontSize}"
FontWeight="Bold" Foreground="White"
HorizontalAlignment="Center" />
</Grid>
</ControlTemplate>
</DataGrid.RowValidationErrorTemplate>
<DataGrid.Resources>
<Style x:Key="DefaultColumnHeaderStyle" TargetType="DataGridColumnHeader">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Column.(ToolTipService.ToolTip)}" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="LabelFamilyID
XXX"
Binding="{Binding Path=LabelFamilyID, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource ErrorStyle}">
</DataGridTextColumn>
<DataGridTextColumn Header="ModelCapacityString
WD????????"
Binding="{Binding Path=ModelCapacityString, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource ErrorStyle}">
</DataGridTextColumn>
<DataGridTextColumn Header="Timeout Value
99:99:99"
Binding="{Binding Path=TimeoutValue, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource ErrorStyle}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
为了简洁起见,我修剪了一些不相关的XAML,比如HeaderStyle定义。
答案 0 :(得分:0)
我在DataGrid下直接添加了以下内容。它删除了感叹号。它不是“修复”,但也没有出现意想不到的结果
<DataGrid.RowValidationErrorTemplate>
<ControlTemplate>
<Grid Margin="0,-12,0,-12" ToolTip="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent}">
</Grid>
</ControlTemplate>
</DataGrid.RowValidationErrorTemplate>
答案 1 :(得分:-1)
我不确定它是什么,但在每个DataGridTextColumns中,删除
Mode=TwoWay
来自每个Binding元素的就可以了。
答案 2 :(得分:-1)
这也删除了感叹号:
<Setter Property="ValidationErrorTemplate" Value="{x:Null}"/>
我希望MS在VS2013更新版5的最终版本中更正它