DataTrigger绑定问题 - 未调用setter

时间:2010-03-24 12:31:08

标签: wpf xaml binding datatrigger

我有一个命令绑定到XAML中的Button。执行时,该命令会更改基础DataContext上的属性值。我希望按钮的内容能够反映属性的新值。

这有效*:

<Button Command="{x:Static Member=local:MyCommands.TestCommand}"
        Content="{Binding Path=TestProperty, Mode=OneWay}" />

但这不是:

<Button Command="{x:Static Member=local:MyCommands.TestCommand}">
  <Button.Style>
    <Style TargetType="{x:Type Button}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=TestProperty, Mode=OneWay}" Value="True">
          <DataTrigger.Setters>
            <Setter Property="Content" Value="Yes"/>
          </DataTrigger.Setters>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=TestProperty, Mode=OneWay}" Value="False">
          <DataTrigger.Setters>
            <Setter Property="Content" Value="No"/>
          </DataTrigger.Setters>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

为什么?

*“工作”我的意思是每当我点击按钮时内容都会更新。 我不知道它是否重要,但如果是的话,我正在使用.NET 3.5 SP1。

更新

我还尝试了另一种变体(删除第二个DataTrigger而不是默认值),仍无济于事:

<Button Command="{x:Static Member=local:MyCommands.TestCommand}">
  <Button.Style>
    <Style TargetType="{x:Type Button}">
      <Setter Property="Content" Value="No"/>
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=TestProperty, Mode=OneWay}" Value="True">
          <DataTrigger.Setters>
            <Setter Property="Content" Value="Yes"/>
          </DataTrigger.Setters>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

TIA

2 个答案:

答案 0 :(得分:1)

尝试将默认内容设置为否,并仅使用第一个DataTrigger。避免使用第二个。

答案 1 :(得分:1)

我自己解决了这个问题。事实证明我在找错了地方。绑定的CLR属性与我在XAML中假设的类型不同。我的愚蠢,真的。