Обработчик событий в DataTemplate - PullRequest
9 голосов
/ 26 ноября 2009

У меня есть WPF ComboBox внутри шаблона данных (много списков в списке), и я хочу обработать кнопку ввода. Было бы легко, если бы это было, например, кнопка - я бы использовал Command + относительный путь привязки и т. д. К сожалению, я понятия не имею, как обрабатывать нажатие клавиши с помощью команды или как установить обработчик события из шаблона. Есть предложения?

Ответы [ 3 ]

12 голосов
/ 27 мая 2012

Вы можете использовать EventSetter в стиле, с которым вы устанавливаете шаблон:

<Style TargetType="{x:Type ListBoxItem}">
      <EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" />
      <Setter Property="Template" ... />
</Style>
4 голосов
/ 27 ноября 2009

Я решил свою проблему с помощью обычного обработчика событий, где я прохожу визуальное дерево, нахожу соответствующую кнопку и вызываю ее команду. Если у кого-то еще есть такая же проблема, пожалуйста, оставьте комментарий, и я предоставлю более подробную информацию о реализации.

UPD

Вот мое решение:

Я ищу в дереве визуалов кнопку, а затем выполняю команду, связанную с кнопкой.

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 голосов
/ 17 января 2014

В этой статье есть способ маршрутизации любого Event на Command

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

...