Hallo zusammen,
ich will in einem WPF-Dialog einen Tastendruck abfangen und dabei den gleichen Event auslösen wie ein Button der geklickt werden kann.
Ich hätte eigentlich vermutet das ich das mit KeyBinding im XAML erledigen könnte, allerdings musste ich feststellen das ich hier nicht auf einen Event in meinem Code Behind verweisen so wie das der Button mit Click="DoSomething_Click" macht. Statt dessen kann ich nur ein Command in meinem DataContext nutzen.
In diesem Fall finde ich das aber ausnahmsweise nicht sinnvoll.
Was hab ich übersehen? Beim Durchsuchen vom Netz musste ich feststellen das KeyBinding nur in Verbindung mit MVVM und einem Command genutzt wird. Weiß jemand von euch wie ich meinen CodeBehind mit dem Tastendruck erreiche?
Viele Grüße
Ralf
Du kannst einfach einen DelegateCommand verwenden der die Selbe Methode benutzt wie der ButtonClick Handler. Alternativ kannst du auch den Button an den Selben Command binden und dir den Handler sparen. Mit DataContext -> Self
public ICommand HotkeyCommand { get { return new DelegateCommand(this.DoSomething) ;} }
Bzw den Command besser im Constructor erstellen da du ja nur einen benötigst.
Hallo Console32,
bin mir jetzt nicht ganz sicher ob es da ein Misverständnis gibt:
Mein WPF-Window hat eine CodeBehind-Datei und auch ein ViewModel. Konkret geht es eigentlich nur um eine kleine, einfache Suchfunktion die in einer großen MultiLine-Textbox ein an anderer Stelle angegebenes Suchwort sucht.
Ich wollte das eigentlich nicht mit MVVM machen da es meines Erachtens eine reine Oberflächenfunktionalität ist und wahrscheinlich mit MVVM auch noch unnötig kompliziert. Daher hab ich das also im CodeBehind gelöst. Mit dem Button der einen einfach Event aufruft funktioniert das soweit, allerdings hätte ich die gleiche Funktionalität noch gerne beim Drücken der F3-Taste.
Da CodeBehind und ViewModel voneinander getrennt sind, wird this.DoSomething nicht funktionieren da meine DoSomething eben nicht im ViewModel sondern im CodeBehind ist.
Ich könnte natürlich eine Referenz zum CodeBehind übergeben - aber das wäre schon unschön...
Oder ich hab dich misverstanden...
Hi...
wenn du nur im Codebehind arbeiten möchtest, könntest du das "KeyDown" oder "KeyUp"-Event verwenden.
Je nach dem obs nur bei einer TextBox oder dem gesamten Fenster greifen soll an der richtigen Stelle...
<TextBox Text="{Binding...}" KeyDown="DoSomething_KeyDown" />
oder
<Window xmlns="..." Title=".." Loaded="Window_Loaded" KeyDown="Window_KeyDown" >...</Window>
und im Eventhandler für Keydown kannst du dann den Eventhandler für den Button aufrufen.
lg
Hallo M@TUK,
du hast ntürlich Recht! Danke!
Das ich da nicht selber drauf gekommen bin X(
Danke für die Hilfe!!!
Viele Grüße
Ralf