0

Toute idée de pourquoi j'obtiens 2 "info-bulle" messages de validation dans ce contrôle dans la zone de liste déroulante dans le DataGrid en mode édition lorsque je survole dessus. Dans le résumé de validation, il n'apparaît qu'une seule fois. Sur le DatagridTextColumn, la "info-bulle" de validation n'apparaît qu'une seule fois en mode édition.La pointe de l'outil de validation apparaît deux fois sur datatemplate combobox + Catel

<DataGrid CanUserAddRows="True" CanUserDeleteRows="True" CanUserReorderColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False" ItemsSource="{Binding Detalle_OC, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" 
         AutoGenerateColumns="False" Height="200" SelectionMode="Single" Name="Detalle_OC" EnableRowVirtualization="True"> 
       <DataGrid.Columns> 
        <DataGridTemplateColumn Header="Producto" Width="400"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding Producto}"></TextBlock> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
         <DataGridTemplateColumn.CellEditingTemplate> 
          <DataTemplate> 

             <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=catel:DataWindow}, Path=DataContext.Productos}" 
              Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=catel:DataWindow}, Path=DataContext.ProductoText, Mode=OneWayToSource}" 
              SelectedValue="{Binding Id_Producto, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" SelectedValuePath="Id_Producto" DisplayMemberPath="Producto" 
              IsTextSearchEnabled="False" StaysOpenOnEdit="True" HorizontalAlignment="Left" Width="350" IsEditable="True" behaviors:ComboBoxBehavior.CharacterCasing="Upper"> 
              <ComboBox.Triggers> 
               <EventTrigger RoutedEvent="TextBoxBase.TextChanged"> 
                <BeginStoryboard> 
                 <Storyboard> 
                  <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsDropDownOpen"> 
                   <DiscreteBooleanKeyFrame Value="True" 
                KeyTime="0:0:0" /> 
                  </BooleanAnimationUsingKeyFrames> 
                 </Storyboard> 
                </BeginStoryboard> 
               </EventTrigger> 
              </ComboBox.Triggers> 
             </ComboBox> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellEditingTemplate> 
        </DataGridTemplateColumn> 
        <DataGridTextColumn Header="Cantidad" Width="100" Binding="{Binding Cantidad, ValidatesOnDataErrors=True, NotifyOnValidationError=True, TargetNullValue='' }"></DataGridTextColumn> 
       </DataGrid.Columns> 
      </DataGrid> 

Ceci est le validateur du modèle.

public class CDetalle_OCValidator:ValidatorBase<cDetalle_OC> 
    { 
     protected override void ValidateFields(cDetalle_OC instance, List<IFieldValidationResult> validationResults) 
     { 
      if (!instance.Id_Producto.HasValue || instance.Id_Producto<=0) 
      { 
       validationResults.Add(FieldValidationResult.CreateError(cDetalle_OC.Id_ProductoProperty, "El producto es requerido")); 
      } 

      if (!instance.Cantidad.HasValue || instance.Cantidad.Value<=0) 
      { 
       validationResults.Add(FieldValidationResult.CreateError(cDetalle_OC.CantidadProperty, "La cantidad tiene que ser mayor a 0")); 
      } 
     } 

     protected override void ValidateBusinessRules(cDetalle_OC instance, List<IBusinessRuleValidationResult> validationResults) 
     { 
      // No business rules validations yet 
     } 
    } 

Répondre

0

La cause du problème était l'utilisation de ValidatesOnDataErrors et de NotifyOnValidationError. Un seul devrait être utilisé à la fois.