如何使用DataTrigger设置WPF中ViewModel中定义的属性

Kev*_*vin 9 wpf datatrigger

我正在编写一个XAML文件,该文件使用DataTrigger在ViewModel中设置属性.ViewModel类定义为:

public class ShellModel : INotifyPropertyChanged
{    
    public Brush ForegroundBrush
    {
        get; set;
    }

    ....................
}
Run Code Online (Sandbox Code Playgroud)

我想在View.xaml中使用DataTrigger来设置属性ForegroundBrush.我写的XAML是:

<StatusBar Name="statusBar" Grid.Row="3">
    <StatusBarItem>
        <StatusBarItem.Style>
            <Style>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding HasError}" Value="True">
                        <Setter Property="ForegroundBrush" Value="Red" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding HasError}" Value="False">
                        <Setter Property="ForegroundBrush" Value="Black" />
                    </DataTrigger>
                        </Style.Triggers>
            </Style>
        </StatusBarItem.Style>
        <TextBlock Name="statusBarMessage" Foreground="{Binding ForegroundBrush}" Text="{Binding StatusMessage}"></TextBlock>
     </StatusBarItem>
     ........................
Run Code Online (Sandbox Code Playgroud)

这不编译.当我改变了

     <Setter Property="ForegroundBrush" Value="Black" />     
Run Code Online (Sandbox Code Playgroud)

     <Setter Property="ShellModel.ForegroundBrush" Value="Black" />
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

依赖属性字段缺失....

我该怎么写这个,以便DataTrigger可以在ViewModel中设置属性ForegroundBrush?

Bot*_*000 7

DataTriggers中的setter只应更改UI元素的属性(并且它们仅适用于DependencyProperties).直接设置StatusBarItem
Foregound属性并设置样式的TargetType.这应该有所帮助.

   <Style TargetType="{x:Type StatusBarItem}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding HasError}" Value="True">
                <Setter Property="Foreground" Value="Red" />
            </DataTrigger>
            <DataTrigger Binding="{Binding HasError}" Value="False">
                <Setter Property="Foreground" Value="Black" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
Run Code Online (Sandbox Code Playgroud)

无论如何,在ViewModel中获取有关可视化表示的信息通常都不是一个好主意.