3

序章

ビューに2つTextBoxあり、それぞれがビューモデルのいくつかのプロパティにバインドされています(Property1Property2)。

TextBoxあるいは、いくつかのブール値で有効になり、プロパティはIDataErrorInfo、ビューモデル+ビューのスタイルを使用して検証されます。

問題

アイテムが無効になっているときに検証スタイルを無効にしたいのですが。

注意:現在、私が見つけた解決策は、ビューモデルで検証スキームを直接変更することですが、ビューを強制的に再読み取りするには、プロパティの変更を通知する必要がありますIDataErrorInfo(プロパティは実際には変更されていませんが、セレクターのみです。 。)

NB2:私の問題はこれに非常に近いです、説明と解決策は複雑すぎて、実際に要点を理解することはできません。

擬似コード

<UserControl 

    <UserControl.Resources>
        <Style TargetType="{x:Type Control}" x:Key="ControlValidationStyle">
            ...
        </Style> 
    </UserControl.Resources>

     ...

    <TextBox  
             Text="{Binding Property1, 
                            ValidatesOnDataErrors=True, 
                            UpdateSourceTrigger=PropertyChanged}" 

             IsEnabled="{Binding IsMode1}"

             Style="{StaticResource ControlValidationStyle}"
     />

    <TextBox  
             Text="{Binding Property2, 
                            ValidatesOnDataErrors=True, 
                            UpdateSourceTrigger=PropertyChanged}" 

             IsEnabled="{Binding IsMode1, 
                                 Converter={StaticResource BoolInverse}}"

             Style="{StaticResource ControlValidationStyle}"
     />

</UserControl>

ControlValidationStyle

<Style TargetType="{x:Type Control}" x:Key="ControlValidationStyle">
    <Style.Resources>
        <Style TargetType="ToolTip">
            <Setter Property="Background" Value="Tomato" />
            <Setter Property="BorderBrush" Value="Red" />
            <Setter Property="BorderThickness" Value="2" />
            <Setter Property="Foreground" Value="white" />
        </Style>
    </Style.Resources>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" 
                        Value="{Binding RelativeSource={RelativeSource Self},
                        Path=(Validation.Errors)[0].ErrorContent}" />
            <Setter Property="Background" Value="Bisque"/>
            <Setter Property="BorderBrush" Value="Red" />
            <Setter Property="BorderThickness" Value="2" />
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>
4

1 に答える 1

6

MultiTrigger代わりに使用しないのはなぜですかTrigger

<MultiTrigger>
    <MultiTrigger.Conditions>
      <Condition Property="Validation.HasError" Value="true" />
      <Condition Property="IsEnabled" Value="true"  />
    </MultiTrigger.Conditions>
 <Setter .../>
</MultiTrigger>
于 2012-08-10T11:55:05.713 に答える