72 votes

Comment lier une commande dans WPF à un gestionnaire d'événements en double-clic d'un contrôle?

Je dois lier l'événement de double-clic d'un bloc de texte (ou éventuellement une image - de toute façon, c'est un contrôle utilisateur), à une commande de mon ViewModel.

TextBlock.InputBindings ne semble pas se lier correctement à mes commandes, aucune aide?

298voto

Legz Points 931
 <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

9voto

Kent Boogaart Points 97432

Essayez les comportements de commandement attachés de Marlon Grech.

9voto

wizpert Points 850

c'est simple, utilisons la méthode MVVM: j'utilise ici MVVM Light, qui est facile à apprendre et puissant.

1.putez les lignes suivantes dans les déclarations 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.définissez votre bloc de texte comme ceci:

 <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.then écrivez votre code de commande dans votre 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
}
 

J'espère que cela fonctionne pour vous car je l'ai utilisé dans l'application Real ERP

2voto

irem Points 11

J'ai également eu un problème similaire dans lequel je devais lier l'événement MouseDoubleClick d'une listview à une commande de mon ViewModel.

La solution la plus simple que j'ai trouvée consiste à placer un bouton factice contenant la liaison de commande souhaitée et à appeler la méthode Execute de la commande du bouton dans le gestionnaire d'événements de l'événement 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" >
 

codebehind

      private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                doubleClickButton.Command.Execute(null);
            }
 

Ce n'est pas simple, mais c'est vraiment simple et ça marche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X