根据 ViewModel 属性 更改视图元素 属性

Change the view element property based on ViewModel property change

我想根据 ViewModel 中的类型更改视图中 Label 的颜色。例如:

我的 class 在 ViewModel 中有一个 bool 属性 如下所示:

MyViewModel
{
public bool IsBlueColor {get; set;} //Here I will raise the `PropertyChanged`
}

我如何包装这个值的触发器来更新我的标签的 Foreground 属性。我能想到的就是使用 DataTrigger 根据 属性 更改 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>

将样式触发器更改为:

<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) 实例并分配给 label1.DataContext=labelVM;