WPF, EntLib: PropertyComparisonValidator не обновляет пользовательский интерфейс сравниваемого значения - PullRequest
1 голос
/ 10 декабря 2010

У меня проблема с PropertyComparisonValidator из EntLib 5.0.Я создал простую форму с полями Min и Max.Проверка: когда 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}"/>

Проблема в интерфейсе пользователя.Если я введу Min = 5 и Max = 4, то оба будут недействительными и помечены красной рамкой.

НО, если я обновлю Min = 3 ->, оба будут правильными.Проверка валидации возвращает НЕТ ОШИБКИ и является идеальной.-> Но пользовательский интерфейс все еще остается красным для Макса.Только Min будет обновлен, потому что в этом поле есть PropertyChanged.

Есть ли работающий пример Min Max с EntLib для WPF?

Спасибо.Michele

1 Ответ

1 голос
/ 12 декабря 2010

К сожалению, в VAB 5.0 есть недостаток дизайна, касающийся PropertyComparisonValidator. Вы не можете украсить свои объекты этим валидатором при использовании одной из библиотек интеграции (как вы делаете для WPF). Это прискорбно, потому что я думаю, что использование PropertyComparisonValidator намного чище, чем писать это в методе [SelfValidation].

Я создал обсуждение этого на форуме VAB. Я надеюсь, что команда EntLib исправит это в следующем выпуске.

А пока: не используйте PropertyComparisonValidator и не пишите эти проверки в методе [SelfValidation] типа.

Надеюсь, это поможет.

...