wpfevent-handlingdatatemplate

Event handler in DataTemplate


I have WPF ComboBox inside a data template (a lot of comboboxes in listbox) and I want to handle enter button. It would be easy if it was e.g. a button - I would use Command + Relative binding path etc. Unfortunately, I have no idea how handle key press with a Command or how to set event handler from template. Any suggestions?


Solution

  • I've solved my problem by using a usual event handler where I walk through the visual tree, find corresponding button and call it's command. If anybody else has the same problem, please post a comment and I'll provide more details of realization.

    UPD

    Here is my solution:

    I search the visual tree for a button and than execute command associated with button.

    View.xaml:

    <ComboBox KeyDown="ComboBox_KeyDown"/>
    <Button Command="{Binding AddResourceCommand}"/>
    

    View.xaml.cs:

    private void ComboBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            var parent = VisualTreeHelper.GetParent((DependencyObject)sender);
            int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
    
            for (int i = 0; i < childrenCount; i++)
            {
                var child = VisualTreeHelper.GetChild(parent, i) as Button;
                if (null != child)
                {
                    child.Command.Execute(null);
                }
            }
        }
    }