【发布时间】:2011-06-28 18:39:50
【问题描述】:
我有一个 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 定义。
【问题讨论】:
标签: wpf datagrid wpfdatagrid