1

EntLib 5.0의 PropertyComparisonValidator에 문제가 있습니다. 최소 및 최대 필드가있는 간단한 양식을 설정했습니다. 유효성 검사는 다음과 같습니다. Min> = Max 인 경우 두 속성이 모두 유효하지 않습니다.WPF, EntLib : PropertyComparisonValidator가 비교 된 값의 UI를 업데이트하지 않습니다.

[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 -> 두 가지를 모두 업데이트하면 정확합니다. 유효성 검사를 확인하면 NO ERROR를 리턴하며 완벽합니다. ->하지만 Max는 여전히 UI가 빨간색으로 유지됩니다. 이 필드에는 PropertyChanged가 있기 때문에 Min 만 업데이트됩니다.

WPF 용 EntLib에서 작동하는 Min Max 예제가 있습니까?

감사합니다. Michele

답변

1

불행히도 PropertyComparisonValidator과 관련된 VAB 5.0의 디자인 결함이 있습니다. 통합 라이브러리 중 하나를 사용할 때이 유효성 검사기로 객체를 꾸밀 수 없습니다 (WPF에서와 마찬가지로). 이것은 PropertyComparisonValidator을 사용하는 것이 [SelfValidation] 방법으로 이것을 작성하는 것보다 훨씬 깔끔하다고 생각하기 때문에 불행합니다.

나는 VAB 포럼에서 discussion about this을 만들었습니다. EntLib 팀이 다음 릴리스에서이 문제를 해결하기를 바랍니다.

PropertyComparisonValidator을 사용하지 말고 유형이 [SelfValidation] 인이 유효성 검사를 작성하십시오.

이 정보가 도움이되기를 바랍니다.

관련 문제