1

EntLib5.0のPropertyComparisonValidatorに問題があります。MinフィールドとMaxフィールドを使用して単純なフォームを設定しました。検証は次のとおりです。最小>=最大の場合、両方のプロパティが無効です。

    [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); }
    }

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

問題はUIです。Min=5とMax=4を入力すると、両方とも無効になり、赤い境界線でマークされます。

しかし、Min = 3->を更新すると、両方とも正しくなります。検証をチェックすると、エラーは返されず、完璧です。->しかし、MaxのUIはまだ赤のままです。このフィールドにはPropertyChangedがあったため、Minのみが更新されます。

EntLib for WPFで動作するMinMaxの例はありますか?

ありがとうございました。ミケーレ

4

1 に答える 1

1

残念ながら、VAB5.0には。に関する設計上の欠陥がありPropertyComparisonValidatorます。統合ライブラリの1つを使用している場合(WPFの場合のように)、このバリデーターでオブジェクトを装飾することはできません。PropertyComparisonValidatorこれは残念なことです。なぜなら、メソッドでこれを書くよりも、を使用する方がはるかにクリーンだと思うからです[SelfValidation]

私はVABフォーラムでこれについてのディスカッションを作成しました。EntLibチームが次のリリースでこれを修正することを願っています。

それまでの間、を使用せず、PropertyComparisonValidatorこれらの検証を[SelfValidation]型のメソッドに記述してください。

これがお役に立てば幸いです。

于 2010-12-12T14:10:18.427 に答える