我的工作具有包含一張圖片和一些文本的按鈕一些代碼,並應顯示無論是圖像,文本,或兩者兼而有之,這取決於綁定的值屬性。目前該代碼使用樣式和DataTriggers:INotifyPropertyChange忽視了綁定到DataTrigger
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屬性的值時,該按鈕不會更改。這種控制是一個選項卡,如果我切換到另一個選項卡,然後切換回來,按鈕將更新以反映按鈕樣式屬性的當前值,但它不會改變,直到我做的。
它看起來像DataTrigger只有當控件呈現,而當綁定值被修改,儘管綁定值養PropertyChanged事件不會重新渲染處理。
任何想法?
:D它是否適用於'Style =「{DynamicResource buttonImageStyle}」'? –
用StaticResource工作得很好,一旦我開始通知正確的屬性名稱。 –
好的,那麼我真的沒有得到StaticResource和DynamicResource之間的區別... –