example commandmanager wpf events command

commandmanager - WPF llama comandos a través de eventos



commandmanager wpf example (4)

La forma más simple de hacer esto es usar un disparador de interacción.

<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>

He añadido esto para la posteridad.

¿Es posible llamar un comando a través de un evento en WPF?

Tengo un botón de guardar que cuando se presiona llama a un comando, esto se presiona cuando haya terminado de editar un cuadro de texto, también pasa un objeto como un parámetro de comando

<Button Content="Save" Command="{Binding DataContext.SaveQueueTimeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" CommandParameter="{Binding}" />

Lo que idealmente me gustaría hacer es llamar a este comando y pasar el objeto como un parámetro cuando el cuadro de texto pierda el foco, en lugar de tener que presionar el botón, algo así como:

<Button LostFocus="{Binding SaveQueueTimeCommand}" />

Y aún de alguna manera pasar el objeto como un parámetro. ¿Hay alguna forma de lograr esto sin usar código detrás ya que estoy usando el patrón MVVM?

Gracias por tu tiempo


Me temo que no creo que lo que quieras hacer sea posible. Los comandos no son delegados, por lo que no puede escribir un comando hasta un evento. Creo que su mejor opción es manejar el evento Button.LostFocus y luego ejecutar manualmente el comando desde el controlador.

No hay nada de malo en poner código en el código cuando se usa MVVM; lo mejor es minimizarlo y mantener el código solo para ver las tareas relacionadas. Llamaría a esta vista de código relacionada, por lo que sería encontrar poner el código en el código.


Puede usar comportamientos adjuntos para lograr esto. Marlon Grech ha escrito la biblioteca de Comportamientos de comando adjuntos para evitarle problemas. El uso se ve así:

<Grid> <local:CommandBehaviorCollection.Behaviors> <local:BehaviorBinding Event="MouseRightButtonDown" Command="{Binding SomeCommand}" CommandParameter="A Command on MouseRightButtonDown"/> </local:CommandBehaviorCollection.Behaviors> </Grid>


<Grid MouseRightButtonDown ="{eb:EventBinding Command=SomeCommand, CommandParameter=$e}"> </Grid>

Mando

{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