這裏是我想要做的觸發器不更新
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
的切換按鈕下面的樣式得到正確的第一個更新的條件,但此後並沒有改變僞代碼。
例如,如果我做了一個不會使vm無效的更改,則顏色正確爲綠色。但是,如果我做出改變以使vm無效,那麼它應該保持綠色,當它應該是紅色時。相反,如果第一次更新使vm無效,則顏色正確設置爲紅色,但是第二次更新糾正了無效錯誤,但使vm變髒並不會將顏色更改爲綠色。
我在做什麼錯?
我還沒有嘗試視覺狀態管理器,但會是一個首選的方式嗎?那看起來怎麼樣?
使用
<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>
而你的VM正在實施INPC? – LPL
@LPL。是的,當然,但我已經引入了一個錯誤,防止通知IsValid開火!你會把觸發器放在同一個位置嗎?您是否瞭解VSM使用情況?請作出回答,以便下一個傻瓜可以回頭檢查明顯的第一個。 – Berryl