画像とテキストを含むボタンがあり、バインドされたプロパティの値に応じて、画像、テキスト、またはその両方を表示するコードを作成しています。コードは現在、StylesとDataTriggersを使用しています。
public enum ButtonStyle { Image, Text, Both };
public class ViewModel : INotifyPropertyChanged
{
private ButtonStyle _buttonStyle;
public ButtonStyle buttonStyle
{
get { return this._buttonStyle; }
set
{
this._buttonStyle = value;
notifyPropertyChanged("buttonStyle");
}
}
と:
<UserControl.Resources>
<Style x:Key="buttonTextStyle" TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=buttonStyle}"
Value="{x:Static local:ButtonStyle.Text}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="buttonImageStyle" TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=buttonStyle}"
Value="{x:Static local:ButtonStyle.Image}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Button>
<StackPanel>
<Image Source="..." Style="{StaticResource buttonImageStyle} />
<Label Style={StaticResource buttonTextStyle}>My Text</Label>
</StackPanel>
</Button>
私の問題?ビューモデルのbuttonStyleプロパティの値を変更しても、ボタンは変更されません。このコントロールはタブ内にあり、別のタブに切り替えてから元に戻すと、buttonStyleプロパティの現在の値を反映するようにボタンが更新されますが、変更するまで変更されません。
DataTriggerは、コントロールがレンダリングされたときにのみ処理され、バインドされた値がPropertyChangedイベントを発生させたにもかかわらず、バインドされた値が変更されたときに再レンダリングされないように見えます。
何か案は?