Laden...

KeyBinding: Nicht Command sondern Event auslösen?

Erstellt von MillionsterNutzer vor 10 Jahren Letzter Beitrag vor 10 Jahren 4.133 Views
M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 10 Jahren
KeyBinding: Nicht Command sondern Event auslösen?

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

C
258 Beiträge seit 2011
vor 10 Jahren

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.

M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 10 Jahren

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

M
402 Beiträge seit 2005
vor 10 Jahren

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

M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 10 Jahren

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