【问题标题】:WPF datagrid invalid indicator not clearing on valid input [duplicate]WPF datagrid无效指示器未清除有效输入[重复]
【发布时间】: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&#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 定义。

【问题讨论】:

    标签: wpf datagrid wpfdatagrid


    【解决方案1】:

    我不确定它是什么,但在每个 DataGridTextColumns 中,删除了

    Mode=TwoWay
    

    来自每个 Binding 元素的伎俩。

    【讨论】:

    • 您还记得这是否是您的最终解决方案吗?我的没有mode=twoway,改错后红色感叹号不会消失。
    【解决方案2】:

    我直接在 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>
    

    【讨论】:

      【解决方案3】:

      这也去掉了感叹号:

      <Setter Property="ValidationErrorTemplate" Value="{x:Null}"/>
      

      希望MS在VS2013 update 5的最终版中更正一下

      【讨论】:

      • 你能举个例子——把setter放在哪里。
      猜你喜欢
      • 2015-12-21
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2013-09-29
      相关资源
      最近更新 更多