【问题标题】:No Parameters are passed to SelectTemplate() of custom DataTemplateSelector. Why?没有参数传递给自定义 DataTemplateSelector 的 SelectTemplate()。为什么?
【发布时间】:2010-11-24 15:22:39
【问题描述】:

我正在使用CellTemplateSelector 有条件地在 DataGrid 列中显示复选标记。

我的DataTemplateSelector 类的方法SelectTemplate(object item, DependencyObject container) 被调用,但参数项为空,而不是预期的DataRowView-object。

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

感谢任何帮助。提前致谢。

【问题讨论】:

    标签: c# .net wpf wpfdatagrid


    【解决方案1】:

    你确定它总是传递 null,还是第一次传递?在设置逻辑树时,CellTemplateSelector 被调用一次,item 为空,然后每个数据项调用一次,item 通过绑定对象。您可能只是在第一个 null 上失败了。

    另请参阅此问题:Why is the SelectTemplate Method run 2 times in debug mode?

    【讨论】:

    • 你是对的。这只是第一次为空。不知道这一点并被困在空值上。但是还有另一个错误,我现在已经修复了。现在它起作用了。非常感谢,这对我很有帮助!
    猜你喜欢
    • 2012-09-20
    • 2020-01-16
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多