如何让DataTrigger工作?

Edw*_*uay 7 wpf binding triggers datatrigger mvvm

如果ViewModel属性=" invalid ",我希望我的TextBox有一个红色背景.我需要改变什么才能起作用?

此版本告诉我Background没有合格的类型名称.

<TextBox
    Width="200"
    Text="{Binding FieldEmail, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Triggers>
        <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="invalid">
            <Setter Property="TextBox.Background" Value="Tomato"/>
        </DataTrigger>
    </TextBox.Triggers>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

当我添加"TextBox"时.它告诉我我必须有一个EventTrigger:

<TextBox
    Width="200"
    Text="{Binding FieldEmail, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Triggers>
        <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="invalid">
            <Setter Property="Background" Value="Tomato"/>
        </DataTrigger>
    </TextBox.Triggers>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

Edw*_*uay 12

请允许我回答这个问题,我忘了将它全部包装成一个样式,然后它很好地工作:

<TextBox
    Width="200"
    Text="{Binding FieldEmail, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="invalid">
                    <Setter Property="TextBox.Background" Value="Tomato"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

或这个:

<Style x:Key="FieldEmailStyle" TargetType="TextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="invalid">
            <Setter Property="TextBox.Background" Value="Yellow"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding FieldEmailValidationStatus}" Value="valid">
            <Setter Property="TextBox.Background" Value="LightGreen"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

    <TextBox
        Width="200"
        Style="{StaticResource FieldEmailStyle}"
        Text="{Binding FieldEmail, UpdateSourceTrigger=PropertyChanged}">
    </TextBox>
Run Code Online (Sandbox Code Playgroud)