0
我有一个自定义的控制,它看起来像这样(简化的)一个ControlTemplate
:订阅DataTemplate中控件事件的最佳做法?
<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
s。想象一下这些DataTemplates中有按钮。有时候您想用某些方法订阅Click
事件。但是这些控件模板通常在ResourceDictionary
中,所以在后面没有的代码来处理相应的处理程序。
我看到了三个不同的解决方案,但:
- 创建具有隐藏文件的代码CustomResourceDictionary attatched
- 覆盖的
OnApplyTemplate
方法(我真的不明白这一点,虽然)和订阅事件编程 - 使用attatched消息并处理“ViewModel”中的UI逻辑。 丑!
实现此目的的最佳实践是什么?还是有更好的解决方案?那么表演呢?
你有没有考虑过使用命令? – 2013-02-14 15:15:55
也许选择'Button'控件并不适合这个目的。这不是关于在这个地方实施指挥,因为我想订阅诸如'SelectionChanged'事件的事件,*(希望这个事件存在于例如'ComboBox'上)。 – 2013-02-15 10:24:44