2010-11-24 3 views
5

J'utilise un CellTemplateSelector pour afficher de manière conditionnelle une coche dans une colonne DataGrid.Aucun paramètre n'est transmis à SelectTemplate() de DataTemplateSelector personnalisé. Pourquoi?

La méthode SelectTemplate(object item, DependencyObject container) de ma classe DataTemplateSelector est appelée mais l'élément de paramètre est null au lieu de l'objet DataRowView attendu.

Voici le code XAML. Les éléments de la propriété ItemsSource de DataGrid est un DataTable, qui fonctionne correctement pour les autres colonnes. (Je travaille avec Visual Studio Express 2010)

... 
<Window.Resources>   
     <DataTemplate x:Key="CheckedTemplate"> 
      <Path Width="16" Height="16" Margin="6,0,0,0" 
      x:Name="CheckMark" SnapsToDevicePixels="False" 
      Stroke="Green" Fill="Green" StrokeThickness="1" 
      Data="M 12.4227,0.00012207C 12.4867,0.126587 12.5333,0.274536 
      12.6787,0.321411C 9.49199,3.24792 6.704,6.57336 
      4.69865,10.6827C 4.04399,11.08 3.47066,11.5573 2.83199, 
      11.9706C 2.09467,10.2198 1.692,8.13196 3.8147e-006, 
      7.33606C 0.500004,6.79871 1.31733,6.05994 1.93067,6.2428C 
      2.85999,6.51868 3.14,7.9054 3.60399,8.81604C 5.80133, 
      5.5387 8.53734,2.19202 12.4227,0.00012207 Z " /> 
     </DataTemplate> 
     <DataTemplate x:Key="UncheckedTemplate"> 
     </DataTemplate> 

     <local:CheckmarkTemplateSelector x:Key="CheckmarkTemplateSelector" CheckedTemplate="{StaticResource CheckedTemplate}" UncheckedTemplate="{StaticResource UncheckedTemplate}" /> 
    </Window.Resources> 
... 
<DataGrid ItemsSource="{Binding Items, Mode=OneWay}" AutoGenerateColumns="False">    
    <DataGrid.Columns> 
     <DataGridTextColumn Header="No" Binding="{Binding no}" IsReadOnly="True" /> 
     <DataGridTextColumn Header="Name" Binding="{Binding name}" IsReadOnly="True" /> 
     <DataGridTemplateColumn Header="Selected" CellTemplateSelector="{StaticResource CheckmarkTemplateSelector}" /> 
    </DataGrid.Columns> 
</DataGrid> 
... 

Toute aide est appréciée. Merci d'avance.

Répondre

4

Etes-vous sûr qu'il est toujours passé null, ou juste la première fois? Le CellTemplateSelector est appelé une fois avec un item nul lors de la configuration de l'arborescence logique, puis appelé une fois par élément de données avec item passé l'objet lié. Vous pourriez juste échouer sur le premier null.

Voir aussi cette question: Why is the SelectTemplate Method run 2 times in debug mode?

+0

Votre raison. C'est seulement la première fois nulle. Je ne le savais pas et suis resté coincé sur la valeur nulle. Mais il y avait une autre erreur, j'ai réparé maintenant. Maintenant ça marche. Merci beaucoup, cela m'a vraiment aidé! – sannoble

Questions connexes