ContentTemplateSelector не переоценивает изменение привязки

ПРЕДИСЛОВИЕ

Я создал два разных типа DataTemplates, чтобы ускорить загрузку моих ячеек сетки данных. Один в основном текстовый блок, другой более дорогой UserControl. При загрузке селектор шаблона данных решает, нужно ли ему загружать более дешевый или более дорогой элемент управления, что увеличивает первую загрузку / производительность с ~12 секунд до ~2, потому что большинство ячеек не должны быть сложными и Время, необходимое для загрузки простого шаблона, практически ничто по сравнению с другим.

Во всяком случае, он отлично работает на нагрузке. Но когда я изменяю данные внизу, это вызывает изменение свойства и должно заставить DataTemplateSelector снова вызывать SelectTemplate(), чтобы переоценить, какой шаблон данных будет использоваться - ну, это не так.

Интересно то, что после вышеуказанного сбоя, когда я щелкаю по ячейке, она вызывает SelectTemplate() и при необходимости переворачивает DataTemplate.

КОД

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

Обратите внимание, что более сложный элемент управления, выбранный селектором DataTemplate, работает отлично, так как я тестировал его без DataTemplateSelector. Кроме того, примечание о Binding Intervals[0].Self - self - это свойство, которое возвращает "this", ссылку на объект, с которым я связан, единственной причиной этого является (когда Self поднимается) заставить DataTemplate быть переоцененным. Видимо, это не совсем работает.

ВОПРОС

Как заставить шаблон данных переоценить?

Вспомогательный код *

это мой ресурс dict (ничего особенного)

<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 ответов

Другие вопросы по тегам