2009-02-12 10 views
1

J'ai un DataGrid dont ItemsSource est lié à une collection Observable en évolution. À l'intérieur de cette collection est un objet métier. En fonction de certaines des valeurs des propriétés de l'objet métier, j'aimerais pouvoir modifier la couleur du texte pour chaque élément affiché dans mon DataGrid une fois le ItemsSource créé.Style Silverlight DataGrid

Est-ce que quelqu'un a déjà fait cela ou a traversé quelque chose de similaire? Merci d'avance.

<DataTemplate x:Key="MyTemplate"> 
     <Grid x:Name="LayoutRoot"> 
      <TextBlock Text="{Binding MyText}" 
         Foreground="{Binding MyStatus, Converter={StaticResource colorConverter}}" /> 
     </Grid> 
    </DataTemplate> 

J'ai ajouté le code ci-dessus et inséré le TemplateColumn au réseau comme ci-dessous:

<data:DataGridTemplateColumn Header="Testing" 
               CellTemplate="{StaticResource MyTemplate}"/> 

Le code fonctionne très bien et sort le texte correct, mais le convertisseur jamais les feux et la liaison de premier plan n'est jamais appelé depuis le début.

Des idées?

Répondre

0

Oui. Utilisez un Value Converter lors de la liaison de données. Ensuite, demandez à votre classe de conversion de mettre en œuvre IValueConverter et de renvoyer un objet Brush quelconque. Vous n'avez pas l'habitude de mettre en œuvre ConvertBack()

+0

Je marquerait ce que la réponse mais vous répondu au sujet d'une grille et non un DataGrid. J'ai ma configuration de convertisseur donc je travaille sur ce style maintenant et répondra avec une solution aussi bien. – strickland

+0

Je pensais plutôt que la grille vivrait à l'intérieur du ItemTemplate. –

0

Ajout à la réponse de la Colombie-Britannique:

Vous pouvez faire un DataGridTemplateColumn et spécifiez un modèle de données pour les cellules dans une colonne. Dans le modèle de données, vous pouvez lier la couleur du texte.

<swcd:DataGrid ... > 
    <swcd:DataGrid.Columns> 
     <swcd:DataGridTemplateColumn Header="MyColumn" CellTemplate="{StaticResource MyColumnDataGridCellTemplate}"/> 
     ... 

ressources:

<DataTemplate x:Key="MyColumnDataGridCellTemplate"> 
    <Grid> 
     <TextBlock Text="{Binding someproperty}" Foreground="{Binding someotherproperty, Converter={StaticResource MyConverter}}"/> 
      ...