2010-11-04 9 views
0

Dans une ListView, j'ai un GridView où l'arrière-plan de ligne est coloré en fonction d'une propriété de l'élément dans le contexte de données de la ligne.Liaison WPF en fonction de la valeur de contexte

Actuellement je définir la couleur à l'aide d'un déclencheur dans la ItemContainerStyle du ListView:

 <DataTrigger Binding="{Binding Path=State}" Value="Active"> 
      <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=State}" Value="Confirmed"> 
      <Setter Property="Background" Value="Green"/> 
     </DataTrigger> 

Cela fonctionne très bien, mais au lieu des couleurs fixes dans le déclenchement de données que je voudrais lier à un paramètre de couleur au lieu . Je pourrais ajouter une liaison dans la propriété Value du setter, mais je voudrais que les couleurs de ligne existantes dans GridView se mettent à jour si le paramètre de couleur change. La liaison dans le setter ne mettra à jour que la couleur des lignes ajoutées après la modification du paramètre.

Je pourrais me frayer un chemin en m'abonnant à des événements de changement de propriété pour mes paramètres ou quelque chose de similaire, mais j'espère un truc de reliure élégant.

Exigences:

  • différentes valeurs d'une propriété dans mon contexte de données devraient définir des couleurs différentes.
  • La couleur devrait changer si la valeur change.
  • La couleur doit également changer si un paramètre de couleur par valeur change.

Répondre

0

Qu'est-ce qu'un GridView dans WPF? Grille de données ?

Peut-être que vous pouvez lier la propriété Background de la ligne avec une liaison multiple sur State et un objet palette de couleurs.

+0

Je suppose que je pourrais implémenter un IMultiValueConverter qui génère une couleur basée à la fois sur le paramètre de couleur et la valeur de la propriété. Cela pourrait peut-être fonctionner. – Holstebroe

+0

GridView est utilisé pour formater un ListView en tant que table de grille. Ce n'est pas la même chose qu'un DataGrid. – Holstebroe