質問

  

関連する質問: DataTriggerとEventTriggerを組み合わせる方法

複数のアイテムを含むリストボックスがあります。アイテムのクラスは INotifyPropertyChanged を実装し、プロパティ IsAvailable を持っています。このプロパティを使用して、リストで使用できないオプションを別の色で示します。

ただし、選択したアイテムが利用できない場合、前景色は赤になります。

<ListBox>
  <ListBox.Resources>
    <DataTemplate DataType="{x:Type local:InstitutionViewModel}">
      <TextBlock Name="Name" Text="{Binding Name}"/>
      <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsAvailable}" Value="False">
          <Setter TargetName="Name" Property="Foreground" Value="#888"/>
        </DataTrigger>
      </DataTemplate.Triggers>
    </DataTemplate>
  </ListBox.Resources>
</ListBox>

上記のデータトリガーを使用して、使用できないアイテムをグレー表示します。

私が直面している問題は、アイテムが選択されているという事実は、テンプレートがバインドされている基になるデータとは何の関係もないということです。私が本当に欲しいのは、依存関係プロパティの通常の Trigger ListBoxItem.IsSelected )と DataTrigger バインドされたデータ項目。

選択の概念をビューモデルに導入せずにこれを実行できますか?

利用できないアイテムを無効にしない理由がわからない場合は、利用できないオプションを選択できることがアプリケーションの要件であることを理解してください。実際にはいくつかのリストボックスがあり、1つの選択ボックスは他のボックスで使用可能なものに影響します。以前の選択に基づいてアイテムが無効にされた場合、ユーザーは気が変わったり、さまざまな組み合わせを調べたりできないため、アイテムを無効にすることはできません。

役に立ちましたか?

解決

この問題に直面している他の人のために、私に役立つ解決策を見つけました。もちろん、私はまだ他の興味深い答えを見ることに興味があります。

これが私がしたことです:

<MultiDataTrigger>
  <MultiDataTrigger.Conditions>
    <Condition Binding="{Binding
      RelativeSource={
        RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
        Path=IsSelected}" Value="True"/>
    <Condition Binding="{Binding IsAvailable}" Value="False"/>
  </MultiDataTrigger.Conditions>
  <Setter TargetName="Name" Property="Foreground" Value="#F00"/>
</MultiDataTrigger>

しかし、これがマルチトリガーであることについて特別なことはありません。データテンプレートで選択したアイテムのスタイルを変更したい場合は、次を使用できます。

<DataTrigger Binding="{Binding 
  RelativeSource={
    RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
    Path=IsSelected}" Value="True">
  <Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>

他のヒント

DataGridRow で使用するには、バインディングモードを Self に変更します:

Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=... 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top