WPF datagrid无效指示符无法清除有效输入

时间:2011-02-17 00:41:00

标签: wpf datagrid wpfdatagrid

我有一个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&#x0a;XXX"
                                    Binding="{Binding Path=LabelFamilyID, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
                                    ElementStyle="{StaticResource ErrorStyle}">
            </DataGridTextColumn>
            <DataGridTextColumn Header="ModelCapacityString&#x0a;WD????????"
                                    Binding="{Binding Path=ModelCapacityString, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
                                    ElementStyle="{StaticResource ErrorStyle}">
            </DataGridTextColumn>
            <DataGridTextColumn Header="Timeout Value&#x0a;99:99:99"
                                    Binding="{Binding Path=TimeoutValue, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
                                    ElementStyle="{StaticResource ErrorStyle}">
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

为了简洁起见,我修剪了一些不相关的XAML,比如HeaderStyle定义。

3 个答案:

答案 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的最终版本中更正它