Вот код для псевдо то, что я хочу сделатьТриггеры не обновляя
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 грязный, не изменяет цвет на зеленый.
Что я делаю неправильно?
Я еще не пробовал 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>
И ваша виртуальная машина внедряет INPC? – LPL
@ LPL. Да, конечно, НО я ввел ошибку, которая предотвращала уведомление об IsValid от стрельбы !! Вы бы оставили триггеры такими же? У вас есть понимание использования VSM? Пожалуйста, сделайте ответ, чтобы следующий дурак мог вернуться и сначала проверить очевидность. – Berryl