J'ai un ViewModel qui fournit une collection d'éléments. Il existe également une propriété ActiveItem. La collection Items peut contenir ou non ActiveItem. Ce que je veux faire (en XAML) est d'afficher les éléments sous forme de liste et de mettre en surbrillance tous les éléments qui sont égaux à l'élément actif.WPF Mettre en évidence l'élément
J'ai essayé ce qui suit sans succès:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border x:Name="outerBorder" Background="Green">
<TextBlock Text="{Binding ItemId}" />
</Border>
<DataTemplate.Triggers>
<DataTrigger
Binding="{Binding
Path=DataContext.Item.ItemId,
RelativeSource={RelativeSource TemplatedParent},
Mode=Default}"
Value="{Binding
Path=DataContext.ActiveItem.ItemId,
RelativeSource={RelativeSource AncestorType=Window},
Mode=Default}"
>
<Setter TargetName="outerBorder"
Property="Background" Value="Orange" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Comme vous pouvez le voir, je tenté d'utiliser un DataTrigger pour correspondre à l'élément en cours avec le activeItem mais il ne fonctionne pas. Je pense que c'est quelque chose à voir avec mon essai d'utiliser une liaison dans DataTrigger.Value - quelque chose que je n'ai pas vu d'autres exemples.
Des idées comment je pourrais faire ce travail?
Merci,
Daniel
Donc, au lieu d'exposer des objets (objet de modèle) directement, je devrais créer un ItemViewModel et exposer cela? Je serais réticent à ajouter une propriété IsActive directement à mon objet modèle Item. – djskinner