1

J'ai un problème avec le PropertyComparisonValidator de EntLib 5.0. J'ai mis en place un formulaire simple avec un champ Min et un Max. La validation est: lorsque Min> = Max les deux propriétés ne sont pas valides.WPF, EntLib: PropertyComparisonValidator ne met pas à jour l'interface utilisateur de la valeur comparée

[RangeValidator(10, RangeBoundaryType.Inclusive, 100, 
     RangeBoundaryType.Inclusive)] 
    [PropertyComparisonValidator("MinVal", ComparisonOperator.GreaterThanEqual, 
     MessageTemplate = @"Min cannot be greater or equal to Max")] 
    [Required(ErrorMessage = @"MaxVal is required")] 
    public int MaxVal 
    { 
     get { return (int)this.GetValue(MaxValProperty); } 
     set { this.SetValue(MaxValProperty, value); } 
    } 

    [RangeValidator(1, RangeBoundaryType.Inclusive, 100, 
     RangeBoundaryType.Inclusive)] 
    [PropertyComparisonValidator("MaxVal", ComparisonOperator.LessThanEqual, 
     MessageTemplate = @"Max cannot be less or equal to Min")] 
    [Required(ErrorMessage = @"MinVal is required")] 
    public int MinVal 
    { 
     get { return (int)this.GetValue(MinValProperty); } 
     set { this.SetValue(MinValProperty, value); } 
    } 

Le XAML:

<TextBox x:Name="txtMinVal" Margin="0,0,5,0" TextWrapping="Wrap" Text="{Binding MinVal, ValidatesOnDataErrors=true, NotifyOnValidationError=true, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" VerticalAlignment="Center" Grid.Row="1" 
    /> 

    <Label x:Name="lblMinVal" Content="Min Value" Margin="5,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Row="1"/> 

    <TextBox x:Name="txtMaxVal" Margin="0,0,5,0" TextWrapping="Wrap" Text="{Binding MaxVal, ValidatesOnDataErrors=true, NotifyOnValidationError=true, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" VerticalAlignment="Center" Grid.Row="2" 
    /> 
    <Label x:Name="lblMaxVal" Content="Max Value" Margin="5,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Row="2"/> 

    <Button x:Name="btnSave" Content="Save" Margin="0" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center" IsEnabled="{Binding IsValid}"/> 

Le problème est l'interface utilisateur. Si je saisis Min = 5 et Max = 4 alors les deux sont invalides et marqués d'une bordure rouge. MAIS si je mets à jour Min = 3 -> les deux shold sont corrects. Vérification de la validation, elle renvoie NO ERROR et est parfaite. -> Mais l'interface reste toujours rouge pour Max. Seul Min sera mis à jour, car ce champ possédait un PropertyChanged.

Existe-t-il un exemple Min Max avec EntLib pour WPF?

Merci. Michele

Répondre

1

Malheureusement, il existe un défaut de conception dans VAB 5.0 concernant le PropertyComparisonValidator. Vous ne pouvez pas décorer vos objets avec ce validateur lorsque vous utilisez l'une des bibliothèques d'intégration (comme vous le faites pour WPF). C'est regrettable, car je pense que l'utilisation d'un PropertyComparisonValidator est beaucoup plus propre que d'écrire ceci dans une méthode [SelfValidation]. J'ai créé un discussion about this sur le forum VAB. J'espère que l'équipe EntLib corrigera cela dans la prochaine version.

En attendant: n'utilisez pas le PropertyComparisonValidator et écrivez ces validations dans la méthode [SelfValidation] d'un type.

J'espère que cela aide.