ボタンがあり、ビュー モデルに BooleanSwitch というブール プロパティがあります。
ボタンのテキストと前景色を次のいずれかにする必要があります。
- 緑オン、BooleanSwitch が true の場合
- 赤 OFF、BooleanSwitch が false の場合
そして、値が変化したときに動的に変化させたいです。
もちろん、コードビハインドで実行できます。しかし、これに対する XAML ソリューションはありますか? 私は次のことを試しました:
<Style x:Key="SwitchButtonStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=BooleanSwitch}" Value="true">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Content" Value="ON"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=BooleanSwitch}" Value="false">
<Setter Property="Foreground" Value="#00AA00" />
<Setter Property="Content" Value="OFF"/>
</DataTrigger>
</Style.Triggers>
</Style>
<Button Click="button_Click" Style="{DynamicResource SwitchButtonStyle}" />
クリック方法は次のとおりです。
private void button_Click(object sender, RoutedEventArgs e)
{
BooleanSwitch = !BooleanSwitch;
}
BooleanSwitch のコードは非常に単純です (.NET 4.5):
private bool privateBooleanSwitch;
public bool BooleanSwitch
{
get { return privateBooleanSwitch; }
set
{
if (value == privateBooleanSwitch)
return;
privateBooleanSwitch= value;
OnPropertyChanged();
}
}
読み込まれると、トリガーがアクティブになり、ボタンが で赤くなりますが、ボタンをクリックすると機能しなくなります...そして、DataTriggers がどのように機能するかをよく理解していないことがわかります。
私は何を間違っていますか?
ボタンは単一目的のボタンですが、特定の要素内で DataTrigger を使用できないことが既にわかっています。テキストと色を含む別のプロパティを作成し、それらをボタンのプロパティにバインドすることを考えていましたが、それは不要なコード調整のように思えます。色とテキストの定義には XAML を使用したいと思います。