Всем доброго времени суток!
Пытаюсь разобраться с реализацией паттерна MVVM с использованием библиотек от GalaSoft. Застопорился на EventToCommand. Как я прочитал в этой теме данная конструкция используется для реализации обработчиков различных событий контролов через команды. Для проверки написал команду, которая выводит сообщение на экран:
public ICommand SelectGroup
{
get
{
return new RelayCommand<Object>(ExecuteSelectTagGroupCommand);
}
}
public void ExecuteSelectTagGroupCommand(object parameter)
{
System.Windows.MessageBox.Show("fdfd");
}
Вызов данной команды я сделал для события MouseDown текстбокса и для события Closing окна приложения.
<i:Interaction.Triggers>
<i:EventTrigger EventName="Closing">
<cmd:EventToCommand Command="{Binding SelectGroup}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<TextBlock Text="{Binding Name}" MouseDown="TextBlock_MouseDown">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown">
<cmd:EventToCommand Command="{Binding SelectGroup}" CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
Однако работает только команда для окна. Причем если подписаться на событие MouseDown для текстбокса, то все работает нормально. В чем может быть причина?
MouseBinding, это боле правильное решение: https://ru.stackoverflow.com/a/888200/218063 – Андрей NOP Jan 25 '19 at 08:53TextBlockу меня используется вHierarchicalDataTemplate. И вот там команды, даже с использованиемMouseBinding, не работают. Но если я вынесу его в отделный самостоятельный элемент - команды отрабатывают. Можно это исправить? – Ivan Kozlov Jan 25 '19 at 09:12{Binding SelectGroup}это привязка к экземпляруDevice, а не к корневой VM. Как вы понимаете, вDeviceнет свойстваSelectGroup– Андрей NOP Jan 25 '19 at 09:55RelativeSource FindAncestor– Андрей NOP Jan 25 '19 at 09:56EventToCommandабсолютно та же проблема, ну и в том топике, на который я вам дал ссылку можно посмотреть как вам добраться до команды: https://ru.stackoverflow.com/a/735522/218063 – Андрей NOP Jan 25 '19 at 10:06