1

XAML でボタンにバインドされたコマンドがあります。コマンドを実行すると、基になる 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 を使用しています。

アップデート:

別のバリエーションも試しました(デフォルト値を優先して2番目の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>

ティア

4

2 に答える 2

1

私は自分で問題を解決しました。私は間違った場所を探していたことがわかりました。バインドされたCLRプロパティは、XAMLで想定したものとは異なるタイプでした。私の愚かさ、本当に。

于 2010-03-24T15:42:42.933 に答える
1

デフォルトの Content を No に設定し、最初の DataTrigger のみを使用するようにしてください。2つ目は避けてください。

于 2010-03-24T12:45:10.290 に答える