0

Jede Idee, warum ich 2 "Tooltip" Nachrichten der Validierung in diesem Steuerelement in der Combobox im DataGrid im Bearbeitungsmodus, wenn ich den Mauszeiger über es. In der Validierungsübersicht wird nur einmal angezeigt. Auf der DatagridTextColumn wird die Validierungs "Tool Tip" nur einmal im Bearbeitungsmodus angezeigt.Validierung Tool Tipp erscheint zweimal auf 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> 

Dies ist der Modellvalidator.

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 
     } 
    } 

Antwort

0

Die Ursache des Problems war die Verwendung beider ValidatesOnDataErrors und NotifyOnValidationError. Es sollte immer nur einer verwendet werden.