2009-08-18 10 views

Antwort

9

Versuchen Sie Marlon Grech attached command behaviors.

+3

ich bereits in meinem Projekt drei Helfer Klassen verwendet haben. Ich wünschte nur, WPF hätte volle Unterstützung für all diese Dinge, die Entwickler damit machen wollen, aber ich denke, das wird in der Zeit kommen, hey. Danke, das hat funktioniert :) – bluebit

+2

Ich stimme deiner allgemeinen Meinung zu - es ist ein wenig frustrierend, dass die Unterstützung für MVVM nicht mehr in WPF integriert ist. Die meisten erfahrenen WPF-Entwickler haben ihre eigene kleine Bibliothek mit Hilfsprogrammen erstellt. Die Lücke in der Funktionalität ist noch größer, wenn Sie Silverlight machen! –

1

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

Die einfachste Lösung, die ich kam, ist eine Dummy-Schaltfläche, die die gewünschte Befehlsbindung hat und die Execute-Methode des Befehls der Schaltfläche im Eventhandler des MouseDoubleClick-Ereignis aufrufen.

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

Code-Behind

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

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

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

+29

+1 Ich persönlich denke, dass diese Antwort die als richtig markiert sein sollte. Es ist nicht nur das einfachste, sondern es kann auch mit MVVM verwendet werden, indem es an ein 'ICommand' in einem Ansichtsmodell bindet:' ' – Sheridan

+0

nicht funktioniert (vielleicht nur auf einigen Objekten), bis Sie das gemacht haben: http://www.telerik.com/community/forums/wpf/gridview/bind-double-click-to-a-viewmodel-command.aspx –

+3

Schöne Alternative zu die unordentlichen angebrachten Verhaltensweisen :) –

6

es ist einfach lassen Sie sich die Art und Weise MVVM verwenden: Ich verwende hier MVVM Licht, das leicht zu erlernen und stark ist.

1.put den folgenden Zeilen die xmlns Erklärungen:

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

2.Define Ihre Textblock wie folgt aus:

<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 Ihre Befehlscode in Ihrem Viewmodel schreiben !!!

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, dass für Sie arbeitet, wie ich es in Echt ERP-Anwendung

+1

Ein bisschen unordentlich mit diesen "Gala-Soft-Sachen" aber der Interaktionsansatz ist gut! –

Verwandte Themen