首页 > 解决方案 > 使用 fluentvalidation 验证数据网格时出现问题

问题描述

我是 WPF 的新手,我正在努力通过使用 FluentValidation 来验证 DataGrid 我想要验证 Datagrid 中的每一行问题是一些行,即使它们是验证的,它表明它们无效

这是 DataGrid 的奇怪行为的屏幕截图

截屏

这是我正在使用的代码

<UserControl.Resources>
       <Style x:Key="errorStyle" TargetType="{x:Type TextBox}">
           <Setter Property="Padding" Value="-2"/>
           <Style.Triggers>
               <Trigger Property="Validation.HasError" Value="True">
                   <Setter Property="Background" Value="Red"/>
                   <Setter Property="ToolTip" 
         Value="{Binding RelativeSource={RelativeSource Self},
           Path=(Validation.Errors)[0].ErrorContent}"/>
               </Trigger>
           </Style.Triggers>
       </Style>
       <Style TargetType="DataGridCell">
           <Setter Property="Margin" Value="0"/>
           <Setter Property="Padding" Value="0"/>
           <Setter Property="BorderThickness" Value="0"/>
           <EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown" />
       </Style>
       <Style TargetType="{x:Type DataGridRow}">
           <Setter Property="ValidationErrorTemplate">
               <Setter.Value>
                   <ControlTemplate>
                       <Image Source="/Images/Alerte.png" ToolTip="{Binding RelativeSource={ RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent}" Margin="0" Width="11" Height="11" />
                   </ControlTemplate>
               </Setter.Value>
           </Setter>
       </Style>
   </UserControl.Resources>
<DataGrid x:Name="grille" Grid.ColumnSpan="2" CanUserAddRows="True" ItemsSource="{Binding FactureDetailList, Mode=TwoWay ,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" Background="#FF06C257" BorderBrush="#FF02401D" Foreground="#FF929292" BorderThickness="0" CanUserResizeColumns="False" >
                           <DataGrid.Columns>
                               <DataGridTextColumn Header="Libelle Piece" EditingElementStyle="{StaticResource errorStyle}" Binding="{Binding LibellePiece, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
                               <DataGridTextColumn Header="Montant HT" EditingElementStyle="{StaticResource errorStyle}" Binding="{Binding MontantHT, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
                               <DataGridTextColumn Header="Taux TVA" EditingElementStyle="{StaticResource errorStyle}" Binding="{Binding TauxTVA, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />

                               <DataGridTextColumn Header="Compte Charge" EditingElementStyle="{StaticResource errorStyle}" Binding="{Binding CompteCharge, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
                               <DataGridTextColumn Header="Compte Tva" EditingElementStyle="{StaticResource errorStyle}" Binding="{Binding CompteTva, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
                               <DataGridTextColumn Header="Code Tva" EditingElementStyle="{StaticResource errorStyle}" Binding="{Binding CodeTva, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
                           </DataGrid.Columns>
                       </DataGrid>
 public partial class FormulaireUC : UserControl
    {
        private ObservableCollection<DetailFacture> FactureDetailList;
        public FormulaireUC ( )
        {
            InitializeComponent( );

            grille.ItemsSource = FactureDetailList;
        }
}

标签: c#wpffluentvalidation

解决方案


推荐阅读