次ControlTemplate
のようなカスタム コントロールがあります (簡略化)。
<ControlTemplate TargetType="CustomControl">
<Grid>
<Grid.Resources>
<DataTemplate TargetType="CustomClassA">
<TextBlock Text={Binding ClassASpecificProperty}" />
</DataTemplate>
<DataTemplate TargetType="CustomClassB">
<TextBlock Text={Binding ClassBSpecificProperty}" />
</DataTemplate>
</Grid.Resources>
<ContentControl Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
Content
これの利点は、タイプ (A または B) に依存する特定の が、DataTemplate
タイプごとに定義された s によって異なって表示されることです。
でも。sだけではない場合もありますTextBlock
。これらの DataTemplates にボタンがあったと想像してください。Click
特定のメソッドでイベントをサブスクライブしたい場合があります。ただし、これらのコントロール テンプレートは通常 にあるため、対応するハンドラーのメソッドを配置するためのコード ビハインドResourceDictionary
はありません。Click
私はまだ3つの異なる解決策を見ました:
- コード ビハインド ファイルが添付された CustomResourceDictionary の作成
- メソッドをオーバーライドし
OnApplyTemplate
(これはよくわかりませんが)、プログラムでイベントをサブスクライブします - 添付されたメッセージを操作し、「ViewModel」で UI ロジックを処理します。醜い!
これを達成するためのベストプラクティスは何ですか? それとも、「より良い」解決策はありますか? そして、パフォーマンスはどうですか?