2010-11-24 13 views
5

Estoy usando un CellTemplateSelector para mostrar de forma condicional una marca de verificación en una columna de DataGrid.No se pasan los parámetros a SelectTemplate() de DataTemplateSelector personalizado. ¿Por qué?

Se llama al método SelectTemplate(object item, DependencyObject container) de mi clase DataTemplateSelector pero el elemento del parámetro es nulo en lugar del DataRowView esperado -objeto.

Aquí está el código XAML. Los elementos de la propiedad ItemsSource de DataGrid son DataTable, que funcionan bien para las otras columnas. (trabajo con 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> 
... 

Cualquier ayuda se agradece. Gracias por adelantado.

Respuesta

4

¿Estás seguro de que siempre pasa nulo o solo la primera vez? El CellTemplateSelector se llama una vez con un nulo item al configurar el árbol lógico, luego se llama una vez por cada elemento de datos con item pasado el objeto encuadernado. Es posible que esté fallando en el primer nulo.

Ver también esta pregunta: Why is the SelectTemplate Method run 2 times in debug mode?

+0

Estás derecha. Es solo la primera vez nulo. No sabía eso y me pegaron con el valor nulo. Pero hubo otro error, lo he solucionado ahora. Ahora funciona. Muchas gracias, ¡esto realmente me ayudó! – sannoble

Cuestiones relacionadas