Команды вызова WPF через события
Можно ли вызвать команду через событие в WPF?
У меня есть кнопка сохранения, которая при нажатии вызывает команду, она нажимается, когда вы закончили редактирование текстового поля, а также передает объект в качестве параметра команды
<Button Content="Save" Command="{Binding DataContext.SaveQueueTimeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" CommandParameter="{Binding}" />
То, что я в идеале хотел бы сделать, это вызвать эту команду и передать объект в качестве параметра, когда текстовое поле теряет фокус, вместо того, чтобы нажимать кнопку, что-то вроде:
<Button LostFocus="{Binding SaveQueueTimeCommand}" />
И все же каким-то образом передать объект в качестве параметра.
Есть ли способ добиться этого без использования кода, поскольку я использую шаблон MVVM
Спасибо за ваше время
Ответы
Ответ 1
Самый простой способ сделать это - использовать триггер взаимодействия.
<Grid xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SomeEvent">
<i:InvokeCommandAction Command="{Binding Path=SomeCommand, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>
Я добавил это ради потомства.
Ответ 2
Для достижения этой цели вы можете использовать приложенное поведение. Марлон Греч написал "Привязанность к командам" , чтобы спасти вас проблема. Использование выглядит следующим образом:
<Grid>
<local:CommandBehaviorCollection.Behaviors>
<local:BehaviorBinding Event="MouseRightButtonDown" Command="{Binding SomeCommand}" CommandParameter="A Command on MouseRightButtonDown"/>
</local:CommandBehaviorCollection.Behaviors>
</Grid>
Ответ 3
Боюсь, я не думаю, что то, что вы хотите сделать, возможно. Команды не являются делегатами, поэтому вы не можете написать команду до события. Я думаю, ваш лучший вариант - обработать событие Button.LostFocus
, а затем вручную выполнить команду из обработчика.
Нет ничего плохого в том, чтобы помещать код в код, стоящий при использовании MVVM, лучше всего минимизировать его и сохранить код для просмотра только связанных задач. Я бы назвал это представление кода связанным, поэтому было бы найти код в коде.
Ответ 4
<Grid MouseRightButtonDown ="{eb:EventBinding Command=SomeCommand, CommandParameter=$e}">
</Grid>
Команда
{eb:EventBinding} (Simple naming pattern to find Command)
{eb:EventBinding Command=CommandName}
CommandParameter
$e (EventAgrs)
$this or $this.Property
string
https://github.com/JonghoL/EventBindingMarkup