序章
ビューに2つTextBox
あり、それぞれがビューモデルのいくつかのプロパティにバインドされています(Property1
、Property2
)。
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>