Обработчик событий в DataTemplate
-
05-07-2019 - |
Вопрос
У меня есть WPF ComboBox внутри шаблона данных (много полей со списком в списке), и я хочу обработать кнопку ввода.Было бы легко, если бы это было, например.кнопка - я бы использовал команду + относительный путь привязки и т. д.К сожалению, я понятия не имею, как обрабатывать нажатие клавиши с помощью команды или как установить обработчик событий из шаблона.Какие-либо предложения?
Решение 2
Я решил свою проблему, используя обычный обработчик событий, где я прохожу по визуальному дереву, нахожу соответствующую кнопку и вызываю ее команду.Если у кого-то еще есть такая же проблема, оставьте комментарий, и я предоставлю более подробную информацию о реализации.
УПД
Вот мое решение:
Я ищу кнопку в визуальном дереве, а затем выполняю команду, связанную с кнопкой.
Просмотр.xaml:
<ComboBox KeyDown="ComboBox_KeyDown"/>
<Button Command="{Binding AddResourceCommand}"/>
Просмотр.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);
}
}
}
}
Другие советы
Вы можете использовать EventSetter в стиле, с которым вы устанавливаете шаблон:
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" />
<Setter Property="Template" ... />
</Style>
В этой статье есть способ перенаправить любое событие
в Command
http://nerobrain.blogspot.nl/2012/ 01 / МОФ-событий к command.html