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.
Versuchen Sie es mit Marlon Grechs Verhalten bei angehängten Befehlen .
<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
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
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.