2010-01-26 4 views
1

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

Répondre

3

Puisque vous utilisez MVVM, pourquoi pas seulement le modèle de vue d'exposer une propriété indiquant le point de vue que ce soit actif ou non? Cela vous permettra de voir cette logique dans votre machine virtuelle.

+0

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

Questions connexes