これが私がやりたいことの疑似コードです
IF NOT ISDIRTY
THEN VISIBILITY EQ VISIBILITY.COLLAPSED
IF ISDIRTY AND ISVALID
THEN VISIBILITY EQ VISIBILITY.VISIBLE AND COLOR = GREEN
IF ISDIRTY AND NOT ISVALID
THEN VISIBILITY EQ VISIBILITY.VISIBLE AND COLOR = RED
以下のToggleButtonのスタイルは、最初の更新で条件を正しく取得しますが、それ以降は変更されません。
たとえば、VMを無効にしない変更を加えた場合、色は正しく緑になります。ただし、vmを無効にするために変更を加えると、赤になるはずのときに緑のままになります。逆に、最初の更新でvmが無効になった場合、色は正しく赤に設定されますが、無効なエラーを修正するがvmをダーティのままにする2番目の更新では、色は緑に変更されません。
私は何が間違っているのですか?
Visual State Managerをまだ試していませんが、それが好ましい方法でしょうか?それはどのように見えるでしょうか?
使用法
<Ellipse Style="{StaticResource EditedStateIndicatorStyle}"/>
スタイル
<Style x:Key="EditedStateIndicatorStyle" TargetType="{x:Type Ellipse}">
<Setter Property="Width" Value="8" />
<Setter Property="Height" Value="8" />
<Setter Property="Margin" Value="8,0"/>
<Setter Property="SnapsToDevicePixels" Value="false" />
<Setter Property="Focusable" Value="False" />
<Style.Triggers>
<!-- Dirty, && NOT Valid -->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsDirty}" Value="true"/>
<Condition Binding="{Binding IsValid}" Value="false"/>
</MultiDataTrigger.Conditions>
<Setter Property="Fill" Value="Red"/>
<Setter Property="ToolTip" Value="You got errors, fool!"/>
</MultiDataTrigger>
<!-- Dirty, but Valid -->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsDirty}" Value="true"/>
<Condition Binding="{Binding IsValid}" Value="true"/>
</MultiDataTrigger.Conditions>
<Setter Property="Fill" Value="Green"/>
<Setter Property="ToolTip" Value="You made changes!"/>
</MultiDataTrigger>
<!-- Not Dirty, don't show anything -->
<DataTrigger Binding="{Binding IsDirty}" Value="false">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>