2010-06-15 6 views
6

Salut J'ai une grille de données qui a un certain nombre de colonnes datagridtemplate qui sont toutes identiques à part qu'elles ont chacune un contexte de données différent sur le panneau de pile du modèle.Modèle partagé WPF DataGridTemplateColumn?

<toolkit:DataGridTemplateColumn Header="Col 1"> 
       <toolkit:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel DataContext="{Binding Times[0]}"> 
         <!-- the structure that I want to extract to a template --> 
         </StackPanel> 
        </DataTemplate> 
       </toolkit:DataGridTemplateColumn.CellTemplate> 
</toolkit:DataGridTemplateColumn> 

<toolkit:DataGridTemplateColumn Header="Col 2"> 
       <toolkit:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel DataContext="{Binding Times[1]}"> 
         <!-- the same structure here --> 
         </StackPanel> 
        </DataTemplate> 
       </toolkit:DataGridTemplateColumn.CellTemplate> 
</toolkit:DataGridTemplateColumn> 

Je veux avoir chaque colonne utiliser un itemtemplate spécifique (comme je l'ai fait avec un listbox) mais ne peut pas l'impression de voir comment à moins que je me manque quelque chose.

Répondre

10

Vous pouvez utiliser un ContentPresenter pour instancier un DataTemplate pour chaque colonne:

<toolkit:DataGrid.Resources> 
    <DataTemplate x:Key="ColumnTemplate"> 
     <StackPanel> 
      <!-- the structure that I want to extract to a template --> 
     </StackPanel> 
    </DataTemplate> 
</toolkit:DataGrid.Resources> 
<toolkit:DataGrid.Columns> 
    <toolkit:DataGridTemplateColumn Header="Col 1"> 
     <toolkit:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ContentPresenter ContentTemplate="{StaticResource ColumnTemplate}" Content="{Binding Times[0]}"/> 
      </DataTemplate> 
     </toolkit:DataGridTemplateColumn.CellTemplate> 
    </toolkit:DataGridTemplateColumn> 
    <toolkit:DataGridTemplateColumn Header="Col 2"> 
     <toolkit:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ContentPresenter ContentTemplate="{StaticResource ColumnTemplate}" Content="{Binding Times[1]}"/> 
      </DataTemplate> 
     </toolkit:DataGridTemplateColumn.CellTemplate> 
    </toolkit:DataGridTemplateColumn> 
</toolkit:DataGrid.Columns> 

Si les éléments de temps sont du même type, vous pouvez aussi faire <DataTemplate DataType={x:Type YourType}> et vous auriez pas besoin de spécifier ContentTemplate="{StaticResource ColumnTemplate}" sur chaque colonne.

+0

Merci c'est ce que je cherchais. J'ai créé le modèle mais je ne connaissais pas le ContentPresenter pour l'afficher dans la colonne. Une dernière chose, savez-vous comment je pourrais alterner la couleur de fond de ces colonnes modélisées? Merci encore. – obaylis

+0

@obaylis: Je pense que vous pouvez simplement définir la propriété AlternatingRowBackground sur le DataGrid. Si vous avez besoin de quelque chose de plus compliqué, vous pouvez définir AlternationCount, puis utiliser AlternationIndex. Voici un article de blog qui décrit les manières de mettre en forme un DataGrid: http://blogs.msdn.com/b/jaimer/archive/2009/01/20/styling-microsoft-s-wpf-datagrid.aspx – Quartermeister

Questions connexes