2010-11-24 21 views
5

我正在使用CellTemplateSelector在DataGrid列中有條件地顯示覆選標記。否參數傳遞給自定義DataTemplateSelector的SelectTemplate()。爲什麼?

我的DataTemplateSelector類的方法SelectTemplate(object item, DependencyObject container)被調用,但參數項爲null,而不是預期的DataRowView對象。

這裏是XAML代碼。 DataGrid的屬性ItemsSource中的項目是DataTable,對於其他列可以正常工作。 (我與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> 
... 

任何幫助表示讚賞。提前致謝。

回答

4

你確定它總是通過null,或者只是第一次?當設置邏輯樹時,CellTemplateSelector被調用一次,空值item,然後每個數據項調用一次,item傳遞綁定對象。你可能只是在第一個null上失敗。

另請參見此問題:Why is the SelectTemplate Method run 2 times in debug mode?

+0

您說得對。這只是第一次null。不知道,並得到null值。但還有一個錯誤,我現在已經修好了。現在它可以工作。非常感謝,這真的幫助了我! – sannoble 2010-11-24 18:06:25

相關問題