2010-06-15 19 views
6

Ciao Ho un datagrid che ha un numero di colonne datagridtemplate che sono tutte identiche a parte hanno ciascuna un datacontext diverso sullo stackpanel del template.Modello condiviso 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> 

voglio avere ogni colonna utilizzare un itemtemplate specifico (come ho fatto con una casella di riepilogo), ma non riesco a vedere come a meno che non mi manca qualcosa.

risposta

10

È possibile utilizzare un ContentPresenter creare un'istanza di un DataTemplate per ogni colonna:

<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> 

Se gli elementi di Times sono tutti dello stesso tipo, si potrebbe anche fare <DataTemplate DataType={x:Type YourType}> e quindi non avrebbe bisogno di specificare ContentTemplate="{StaticResource ColumnTemplate}" su ogni colonna.

+0

Grazie è quello che stavo cercando. Avevo creato il modello ma non ero a conoscenza di ContentPresenter per visualizzarlo nella colonna. Un'ultima cosa, sai come potrei alternare il colore di sfondo di queste colonne di modelli? Grazie ancora. – obaylis

+0

@obaylis: Penso che si possa semplicemente impostare la proprietà AlternatingRowBackground sul DataGrid. Se hai bisogno di qualcosa di più complicato, puoi impostare AlternationCount e quindi utilizzare AlternationIndex. Ecco un post sul blog che descrive come personalizzare un DataGrid: http://blogs.msdn.com/b/jaimer/archive/2009/01/20/styling-microsoft-s-wpf-datagrid.aspx – Quartermeister

Problemi correlati