2010-06-15 8 views
6

Hola Tengo una cuadrícula de datos que tiene un número de columnas de plantilla de cuadrícula de datos que son todas idénticas aparte de que cada una tiene un contexto de datos diferente en el panel de la pila de la plantilla.WPF DataGridTemplateColumn plantilla compartida?

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

Quiero tener cada columna utilizar un itemtemplate específica (como yo he hecho con un cuadro de lista), pero parece que no puede ver cómo, a menos que me falta algo.

Respuesta

10

Se puede usar un ContentPresenter a instancias de un DataTemplate para cada columna:

<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 los elementos de tiempos son todos del mismo tipo, también se puede hacer <DataTemplate DataType={x:Type YourType}> y entonces no sería necesario especificar ContentTemplate="{StaticResource ColumnTemplate}" en cada columna

+0

Gracias eso es lo que estaba buscando. Tenía la plantilla creada, pero no sabía acerca de ContentPresenter para mostrarla en la columna. Una última cosa, ¿sabes cómo podría alternar el color de fondo de estas columnas con plantilla? Gracias de nuevo. – obaylis

+0

@obaylis: Creo que puede establecer la propiedad AlternatingRowBackground en DataGrid. Si necesita algo más complicado, puede establecer AlternationCount y luego usar AlternationIndex. Aquí hay una publicación de blog que describe formas de diseñar un DataGrid: http://blogs.msdn.com/b/jaimer/archive/2009/01/20/styling-microsoft-s-wpf-datagrid.aspx – Quartermeister

Cuestiones relacionadas