我有一个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
引起的不同。
然而。有时不仅仅是TextBlock
。想象一下,这些DataTemplates中有按钮。有时您希望使用某些方法订阅Click
个事件。但是这些控件模板通常位于ResourceDictionary
中,因此后面没有代码用于为对应的Click
处理程序添加方法。
我看到了三种不同的解决方案:
OnApplyTemplate
方法(我真的不明白这一点)并以编程方式订阅事件实现这一目标的最佳做法是什么?或者甚至有“更好”的解决方案?性能怎么样?
答案 0 :(得分:0)
您可以使用DelegateCommand将您的按钮与诸如ViewModel中的命令绑定。
<Button Command="{Binding MyCommand}"/>
视图模型:
public DelegateCommand MyCommand {get;set;} //INotifyPropertyChanged, etc.
private void ExecuteMyCommand()
{
//Do stuff here.
}
public MyViewModel()
{
MyCommand = new DelegateCommand(ExecuteMyCommand);
}