根据 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;
我想根据 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;