【问题标题】:WPF MVVM DataTrigger not workingWPF MVVM DataTrigger 不工作
【发布时间】:2018-06-19 13:34:07
【问题描述】:

我刚刚开始使用数据触发器,所以如果它很简单,我很抱歉,但我无法让我的数据触发器工作。难道是因为我也有命令绑定?

<Button x:Name="logOnButton"  HorizontalAlignment="Left" Margin="369,70,0,0" VerticalAlignment="Top" Width="75" IsEnabled="True" Command="{Binding LogonButtonClick}">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Background" Value="Red"/>
                <Setter Property="Content" Value="Log On"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding LoggedOn}" Value="True">
                        <Setter Property="Control.Background" Value="Green"/>
                        <Setter Property="Content" Value="Log Off"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding LoggedOn}" Value="False">
                        <Setter Property="Control.Background" Value="Red"/>
                        <Setter Property="Content" Value="Log On"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

【问题讨论】:

  • 您的LoggedOn 属性是否使用INotifyPropertyChanged
  • 是的,但我没有明确调用它,因为我的理解是这是自动的
  • LoggedOn 属性设置器必须在属性值更改时触发 PropertyChanged 事件(在设置支持字段之后)。
  • 我看到你的默认控件属性和LoggedOn = False一样,第二个DataTrigger触发了吗?如果是这样,我会遵循 Clemens 的建议并在 LoggedOn 属性设置器中触发事件。
  • 当然,第二个 DataTrigger 是多余的,因为它只是设置样式设置器已经设置的值。此外,Property="Control.Background" 应该只是 Property="Background"

标签: wpf mvvm datatrigger


【解决方案1】:

谢谢大家,我不得不手动触发 PropertyChanged,我以为这是自动完成的。一旦我这样做了,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2015-04-30
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多