Event handler in DataTemplate

前端 未结 3 821
梦如初夏
梦如初夏 2020-12-16 02:23

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

相关标签:
3条回答
  • 2020-12-16 02:45

    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);
                }
            }
        }
    } 
    
    0 讨论(0)
  • 2020-12-16 02:52

    You can use the EventSetter in the style you are setting the template with:

    <Style TargetType="{x:Type ListBoxItem}">
          <EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" />
          <Setter Property="Template" ... />
    </Style>
    
    0 讨论(0)
  • 2020-12-16 02:54

    This article has a way to route any Event to Command

    http://nerobrain.blogspot.nl/2012/01/wpf-events-to-command.html

    0 讨论(0)
提交回复
热议问题