none
WPF - Validation erreur RRS feed

  • Question

  • Bonjour

    J'ai mis en place dans le fichier ressource un style pour gérer les erreurs de saisie :

      <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource baseStyle}">
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Margin" Value="5" />
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel LastChildFill="True">
                            <TextBlock DockPanel.Dock="Right"
    								Foreground="Red"
    								Margin="1" 
    								FontSize="10pt"
    								Text="{Binding ElementName=MyAdorner, 
                                   Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
                            </TextBlock>
    
                            <Border BorderBrush="Red" BorderThickness="3">
                                <AdornedElementPlaceholder Name="MyAdorner" />
                            </Border>
    
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="ToolTip"
    						Value="{Binding RelativeSource={RelativeSource Self}, 
                           Path=(Validation.Errors)[0].ErrorContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>

    J'ai mis en place dans ma view la textbox qui doit gérer les erreurs :

       <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Stretch" >
                <Label  Content="Nombre de face :" />
                <TextBox Width="50" HorizontalAlignment="Right" 
                         Text="{Binding NbreFace, Mode=TwoWay,  ValidatesOnDataErrors=True, 
                        NotifyOnSourceUpdated=true, NotifyOnValidationError=true, ValidatesOnExceptions=true,UpdateSourceTrigger=PropertyChanged }">
                </TextBox>
            </StackPanel>

    J'ai placé aussi dans le code behind du viewmodel la gestion de l'erreur sur le validate :

        Private Sub GroupeFaceModeleNouveauViewModel_Validate(columnName As String, ByRef errorMessage As String) Handles Me.Validate
            Select Case columnName
                Case "NbreFace"
                    If Not IsNumeric(NbreFace) Then
                        errorMessage = "Saisissez Un nombre > 0 !"
                    End If
                    If nvl(NbreFace, 0) = 0 Then
                        errorMessage = "Un nombre > 0 est obligatoire !"
                    End If
    
            End Select
        End Sub

    A l'exécution j'ai le message suivant :

    System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'ValidationError') from '(Validation.Errors)' (type 'ReadOnlyObservableCollection`1'). BindingExpression:Path=(0)[0].ErrorContent; DataItem='TextBox' (Name=''); target element is 'TextBox' (Name=''); target property is 'ToolTip' (type 'Object') ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: L'argument spécifié n'était pas dans les limites de la plage des valeurs valides.

    Nom du paramètre : index'

    System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'ValidationError') from '(Validation.Errors)' (type 'ReadOnlyObservableCollection`1'). BindingExpression:Path=AdornedElement.(0)[0].ErrorContent; DataItem='AdornedElementPlaceholder' (Name='MyAdorner'); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: L'argument spécifié n'était pas dans les limites de la plage des valeurs valides.

    Nom du paramètre : index'

    Peut on m'expliquer?

    Merci

    François


    FB

    mercredi 13 avril 2016 11:10

Réponses

Toutes les réponses