ContentTemplateSelector不会在Binding更改时重新评估

时间:2012-04-27 20:57:46

标签: wpf datagrid contenttemplateselector

前言

我创建了两个不同的DataTemplates数据,以便更快地加载数据网格单元格。一个基本上是文本块,另一个是更昂贵的UserControl。在加载时,数据模板选择器决定是否需要加载廉价和更昂贵的控件,这将首次加载/性能从大约12秒提高到~2,因为大多数单元不需要复杂且加载简单模板所需的时间与其他模板相比几乎没有。

无论如何,它在加载时效果很好。但是,当我更改下面的数据时,会引发属性更改,并且应该强制DataTemplateSelector再次调用SelectTemplate()来重新评估要使用的数据模板 - 嗯,它不会。

有趣的是,在上面的失败之后,当我点击一个单元格时,它会调用SelectTemplate()并在需要时翻转DataTemplate。

CODE

<DataGrid>
 .....
<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ContentControl Content="{Binding Intervals[0].Self}" 
                      ContentTemplateSelector="{StaticResource TxtVsExpensiveCell_TemplateSelector}"/>
         </DataTemplate>
       </DataGridTemplateColumn.CellTemplate>

注意,DataTemplate Selector选择的更复杂的控件与我在没有DataTemplateSelector的情况下测试时完美配合。 另外,关于Binding Intervals [0]的注释。自我是一个返回“this”的属性,我绑定的Object的ref,唯一的原因是(当Self被提升时)到强制重新评估DataTemplate。显然这不太有用。

问题

如何强制重新评估数据模板?

支持代码*

这是我的资源词典(没什么特别的)

<DataTemplate x:Key="SimpleTemplate">
    <TextBlock DataContext="{Binding}"/>
</DataTemplate>

<DataTemplate x:Key="ComplexTemplate">
    <Views:ComplexCell DataContext="{Binding}"/>
</DataTemplate>

<Views:MyTemplateSelector
    x:Key="TxtVsExpensiveCell_TemplateSelector"
    SimpleTemplate="{StaticResource SimpleTemplate}"
    ComplexTemplate="{StaticResource ComplexTemplate}"/>

显然我有MyTemplateSelector类覆盖SelectTemplate并且工作得很好......

0 个答案:

没有答案