我正在处理一些代码,它有一个包含图像和一些文本的 Button,它应该显示图像、文本或两者,具体取决于绑定属性的值。该代码当前使用 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 事件。
有任何想法吗?