我想根据ViewModel中的类型更改视图中Label
的颜色。例如:
我在ViewModel中的类有一个bool
属性,如下所示:
MyViewModel
{
public bool IsBlueColor {get; set;} //Here I will raise the `PropertyChanged`
}
如何为此值包装触发器以更新标签的Foreground
属性。我能想到的只是使用DataTrigger
基于其on属性更改UI元素的属性。但不是基于viewmodel。
我如何在xaml中实现这一目标?
现在我正在这样做:
<Label.Style>
<Style TargetType="Label" BasedOn="{StaticResource LabelStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsBlueColor, RelativeSource={RelativeSource AncestorType={x:Type local2:MyViewModel}}}" Value="True">
<Setter Property="Foreground" Value="RoyalBlue"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsBlueColor, RelativeSource={RelativeSource AncestorType={x:Type local2:MyViewModel}}}" Value="False">
<Setter Property="Foreground" Value="White"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
答案 0 :(得分:2)
将样式触发器更改为:
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsBlueColor}" Value="True">
<Setter Property="Foreground" Value="RoyalBlue"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsBlueColor}" Value="False">
<Setter Property="Foreground" Value="White"/>
</DataTrigger>
</Style.Triggers>
检查ViewModel中的INotifyPropertyChanged的实现。
这适用于我的样本。
示例:
class LabelViewModel:INPC
{
public event PropertyChangedEventHandler PropertyChanged=new delegate{};
bool _isBlueColor;
public bool IsBlueColor
{
get
{
return _isBlueColor;
}
set
{
_isBlueColor=value;
OnPropertyChange();
}
}
public OnPropertyChange([CallerMemberName] string propname="")
{
PropertyChanged.Invoke(this,ew PropertyChangedEventArgs(propname));
}
}
创建LabelViewModel(labelVM)的实例&amp;分配给label1.DataContext = labelVM;