如何处理WPF DataTemplate中的事件?

时间:2013-01-15 12:20:09

标签: wpf events custom-controls datatemplate

我有一个自定义控件,它有一个名为ViewModel的依赖项属性,该值显示在ContentPresenter中。我对每种类型的ViewModel都有一个DataTemplate。每个模板都允许用户以不同的方式进行选择,我需要在后面的自定义控制代码中处理该选择事件。

<Style TargetType="{x:Type local:MyCustomControl}">

    <Style.Resources>
        <ResourceDictionary>

            <DataTemplate DataType="{x:Type local:ViewModelOne}">

                <!-- how to handle this event? -->
                <ListBox
                    MouseDoubleClick="ListBox_MouseDoubleClick"/>
            </DataTemplate>

            <DataTemplate DataType="{x:Type local:ViewModelTwo}">

                <!-- this ListBox has another style, but event should
                     be handled the same way -->
                <ListBox
                    MouseDoubleClick="ListBox_MouseDoubleClick"/>
            </DataTemplate>

            <!-- more templates here -->

        </ResourceDictionary>
    </Style.Resources>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyCustomControl}">
                <ContentPresenter Content="{TemplateBinding ViewModel}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

修改

以下是自定义控件背后的代码,我想在双击ListBox中的某些内容时调用该方法:

public class MyCustomControl : Control
{
    // how to attach ListBox MouseDoubleClick event to this method? 
    private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        DoMagic(((ListBox)sender).SelectedItem);
    }
}

1 个答案:

答案 0 :(得分:0)

这些DataTemplates是否在资源字典中定义?

如果是,您可以使用attached behaviors

如果它们是在MyWindow或MyUserControl XAML中定义的,那么您可以将它们定义为背后的代码,即MyWindow.xaml.csMyUserControl.xaml.cs