2010-08-17 12 views
4

Je dois créer une colonne DataGrid réutilisable avec un objet CellTemplate personnalisé. Ce CellTemplate devrait, entre autres choses, contenir un contrôle TextBlock auquel j'ai besoin de lier les valeurs à afficher dans le DataGrid. Tous les exemples que je l'ai vu jusqu'à présent spécifié la CellTemplate pour une colonne directement lorsque vous l'utilisez dans une propriété Colonnes de DataGrid et également spécifier une liaison directement au TextBlock, par exemple:Colonne DataGrid personnalisée avec un CellTemplate et une liaison

<data:DataGrid> 
    <data:DataGrid.Columns> 
     <data:DataGridTemplateColumn Header="Name"> 
      <data:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Name}"/> 
       </DataTemplate> 
      </data:DataGridTemplateColumn.CellTemplate> 
     </data:DataGridTemplateColumn> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

J'ai besoin de résumer cette colonne dans un contrôle unique et réutilisable et je veux spécifier une liaison pour cela comme pour un DataGridTextColumn ordinaire. En d'autres termes, lorsque vous utilisez cette colonne personnalisée, je veux juste écrire quelque chose comme ceci:

<data:DataGrid> 
    <data:DataGrid.Columns> 
     <controls:CustomColumn Header="Name" Binding="{Binding Name}" /> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

Le problème est que la DataGridTemplateColumn ma colonne personnalisée est héritant de ne pas la propriété Binding. J'ai pensé que je serais capable d'utiliser DataGridBoundColumn, mais il n'est pas possible de spécifier un CellTemplate pour cela.

Comment atteindre un comportement souhaité? Je vous remercie!

Répondre

1

Je pense que la chose la plus simple à faire est de créer un CustomControl puis utiliser comme ceci:

  <DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <controls:CustomColumn Header="Name" Binding="{Binding Name}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

je fait quelque chose hier similaire, et il fonctionne assez bien