wake-up-neo.com

Wie binde ich einen Befehl in WPF an einen Doppelklick-Ereignishandler eines Steuerelements?

Ich muss das Doppelklick-Ereignis eines Textblocks (oder möglicherweise auch eines Bildes - so oder so - eines Benutzersteuerelements) an einen Befehl in meinem ViewModel binden.

TextBlock.InputBindings scheint nicht korrekt an meine Befehle gebunden zu sein.

61
bluebit

Versuchen Sie es mit Marlon Grechs Verhalten bei angehängten Befehlen .

10
Kent Boogaart
<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

240
Legz

es ist ganz einfach, lassen Sie uns die MVVM-Methode verwenden: Ich verwende hier MVVM Light, das einfach zu erlernen und leistungsstark ist.

1.Geben Sie die folgenden Zeilen in die XMLNS-Deklarationen ein:

xmlns:i="http://schemas.Microsoft.com/expression/2010/interactivity"  
xmlns:GalaSoft_MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command;
                                   Assembly=GalaSoft.MvvmLight.Extras.WPF4"

2. Definieren Sie Ihren Textblock wie folgt:

<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. Schreiben Sie dann Ihren Befehlscode in Ihr Ansichtsmodell !!!

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
}

Ich hoffe, das funktioniert bei Ihnen so, wie ich es in der Real ERP application verwendet habe

6
Adam

Ich hatte auch ein ähnliches Problem, bei dem ich das MouseDoubleClick-Ereignis einer Listenansicht an einen Befehl in meinem ViewModel binden musste.

Die einfachste Lösung, die ich gefunden habe, besteht darin, eine Dummy-Schaltfläche mit der gewünschten Befehlsbindung zu platzieren und die Execute-Methode des Schaltflächenbefehls in der Ereignisbehandlungsroutine des MouseDoubleClick-Ereignisses aufzurufen.

.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);
            }

Es ist nicht einfach, aber es ist wirklich einfach und es funktioniert.

1
irem