문제

idataerRorinfo를 사용하여 WPF의 양식으로 내 데이터를 검증하고 있습니다. 발표자에게 검증이 구현되었습니다.

실제 유효성 검사가 발생하지만 UI를 업데이트하고 스타일을 설정 해야하는 XAML은 일어나지 않습니다.

여기있어:

  <Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip"
                    Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                Path=(Validation.Errors)[0].ErrorContent}"/>
                    <Setter Property="Background" Value="Red"/>
                </Trigger>
        </Style.Triggers>
    </Style>

문제는 내 구속력이 있다는 것입니다 Validation.Errors 데이터가 포함되어 있습니다. 이 데이터를 발표자 클래스에서 가져 와서 UI 요소를 업데이트하기 위해이 XAML로 전달하려면 어떻게해야합니까?

편집하다:

텍스트 상자 :

 <TextBox Style="{StaticResource textBoxInError}" Name="txtAge" Height="23" Grid.Row="3" Grid.Column="0" HorizontalAlignment="Right" VerticalAlignment="Center" Width="150">
            <TextBox.Text>
                <Binding Path="StrAge" Mode="TwoWay"
                         ValidatesOnDataErrors="True"
                         UpdateSourceTrigger="PropertyChanged"/>
            </TextBox.Text>

유효성 검사가 발생하지만 데이터가 유효하지 않을 때 적용 할 스타일이 발생하지 않습니다.

도움이 되었습니까?

해결책

양식이 묶여 있기 때문에 출력 창을 보셨습니까? 바인딩이 발생할 때 출력을 검토하여 상당수의 검증 문제를 찾을 수 있습니다.

한 번의 빠른 메모 :

사용

Path=(Validation.Errors).CurrentItem.ErrorContent

보다는

Path=(Validation.Errors)[0].ErrorContent

유효한 값이 제어에 제공되면 몇 가지 추가 결합 발굴을 절약 할 수 있습니다.

다른 팁

나는 당신의 스타일이 완전히 끝나지 않았다는 것을 알았습니다.

스타일에는 유효성 검사 오류가 발생할 때 작동하기 위해 "validation.errortemplate"을 정의하는 제어 템플릿이 필요합니다. 다음을 변경하여 어떻게 진행되는지 확인하십시오.

Paul Stovell은 WPF 검증에 대한 아주 좋은 기사를 가지고 있습니다. 여기 그것은 당신이 필요한 대부분의 것들을 다룰 것입니다. 나는 또한 기사를 썼습니다 여기 원하는 유효성 검사를 단순화합니다.

전에

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip"
                Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                Path=(Validation.Errors)[0].ErrorContent}"/>
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>

후에

<Style  x:Key="textBoxInError" TargetType="{x:Type TextBox}">
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <Border BorderBrush="Red" BorderThickness="1">
                    <AdornedElementPlaceholder />
                </Border>
            </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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top