¿Cómo vincular un comando en WPF a un controlador de eventos de doble clic de un control?
data-binding mvvm (4)
Prueba los comportamientos de comando adjuntos de Marlon Grech.
Necesito vincular el evento de doble clic de un bloque de texto (o potencialmente una imagen también, de cualquier manera, es un control de usuario), a un comando en mi ViewModel.
TextBlock.InputBindings no parece vincularse correctamente a mis comandos, ¿alguna ayuda?
También tuve un problema similar en el que necesitaba vincular el evento MouseDoubleClick de una vista de lista a un comando en mi ViewModel.
La solución más simple que surgió fue poner un botón ficticio que tiene el enlace de comando deseado y llamar al método Execute del comando del botón en el manejador de eventos del evento MouseDoubleClick.
.xaml
<Button Visibility="Collapsed" Name="doubleClickButton" Command="{Binding Path=CommandShowCompanyCards}"></Button>
<ListView MouseDoubleClick="ListView_MouseDoubleClick" SelectedItem="{Binding Path=SelectedCompany, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Margin="0,10,0,0" ItemsSource="{Binding Path=CompanyList, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" HorizontalContentAlignment="Stretch" >
código detrás
private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
doubleClickButton.Command.Execute(null);
}
No es sencillo, pero es realmente simple y funciona.
es simple, usemos la forma MVVM: estoy usando MVVM Light, que es fácil de aprender y fuerte.
1. ingrese las siguientes líneas las declaraciones xmlns:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:GalaSoft_MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command;
assembly=GalaSoft.MvvmLight.Extras.WPF4"
2. Defina su bloque de texto de la siguiente manera:
<textBlock text="Text with event">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<GalaSoft_MvvmLight_Command:EventToCommand
Command="{Binding Edit_Command}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</textBlock>
3.entonces escribe tu código de comando en tu viewmodel !!!
ViewModel1.cs
Public RelayCommand Edit_Command
{
get;
private set;
}
Public ViewModel1()
{
Edit_Command=new RelayCommand(()=>execute_me());
}
public void execute_me()
{
//write your code here
}
Espero que funcione para ti, ya que lo he usado en la aplicación Real ERP
<Button>
<Button.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="YourCommand" />
</Button.InputBindings>
</Button>
http://thejoyofcode.com/Invoking_a_Command_on_a_Double_Click_or_other_Mouse_Gesture.aspx