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