序文
データグリッド セルの読み込み時間を短縮するために、2 つの異なるデータ DataTemplate を作成しました。1 つは基本的にテキストブロックで、もう 1 つはより高価な 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 Selector によって選択されたより複雑なコントロールは、DataTemplateSelector なしでテストしたので、完全に機能することに注意してください。また、Binding Intervals[0].Self に関する注意 - self は、「this」を返すプロパティです。これは、私がバインドしているオブジェクトの参照です。その唯一の理由は、(Self が発生したとき) to 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}"/>
そして明らかに、SelectTemplateをオーバーライドして正常に動作するMyTemplateSelectorクラスがあります...