Wpf ContentTemplateSelector不会在绑定更改时重新计算
前言Wpf ContentTemplateSelector不会在绑定更改时重新计算,wpf,datagrid,contenttemplateselector,Wpf,Datagrid,Contenttemplateselector,前言 <DataGrid> ..... <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ContentControl Content="{Binding Intervals[0].Self}" ContentTemplateSelector
<DataGrid>
.....
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding Intervals[0].Self}"
ContentTemplateSelector="{StaticResource TxtVsExpensiveCell_TemplateSelector}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
我创建了两个不同的数据模板,以加快数据网格单元的加载速度。一个基本上是文本块,另一个是更昂贵的用户控件。加载时,数据模板选择器决定是否需要加载便宜的控件或更昂贵的控件,这将首次加载/性能从约12秒提高到约2秒,因为大多数单元格不需要复杂,加载简单模板所需的时间与其他单元格相比几乎不算什么
不管怎样,它在负载下工作得很好。但是,当我更改下面的数据时,会引发属性changed,并应强制DataTemplateSelector再次调用SelectTemplate(),以重新评估要使用的数据模板,但事实并非如此
有趣的是,在上述失败之后,当我单击单元格时,它会调用SelectTemplate(),并在需要时翻转数据模板
代码
<DataGrid>
.....
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding Intervals[0].Self}"
ContentTemplateSelector="{StaticResource TxtVsExpensiveCell_TemplateSelector}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
.....
请注意,DataTemplateSelector选择的更复杂的控件可以完美地工作,因为我在没有DataTemplateSelector的情况下对其进行了测试。
另外,还有一个关于绑定间隔[0]的说明。Self-Self是一个返回“this”的属性,即我要绑定到的对象的ref,唯一的原因是to(在引发Self时)强制重新计算DataTemplate。显然这不太管用
问题
如何强制数据模板重新评估
支持代码*
这是我的资源目录(没什么特别的)
显然,我有一个MyTemplateSelector类,它重写SelectTemplate,并且工作正常…可能的dup?