C# MVVM alle Keys abfangen

Rooky420

Cadet 4th Year
Registriert
Nov. 2015
Beiträge
98
Hallo,

gibt es eine möglichkeit in mvvm alle keys abzufangen wie in forms?
d.h. dass bei jedem Tastaturdruck ein event im Viewmodel ausgelößt wird und der jeweilige Tastatur-ASCII-Code übergeben wird. es ist ja unschön für jede Tastaturtaste ein Keybinding zu erstellen.

Code:
<Window x:Class="MVVMButtonTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MVVMButtonTest"
        Title="MainWindow" Height="350" Width="525"
        >
    <Window.DataContext>
        <local:MainWindowViewModel />
    </Window.DataContext>
    <Window.InputBindings>
        <KeyBinding Key="E" Command="{Binding KeyDownE}"></KeyBinding>
    </Window.InputBindings>
...
...

Code:
        public ICommand KeyDownE
        {
            get
            {
                return new RelayCommand(param => this.KeyDown(param));
            }
        }

Die einzige möglichkeit die ich momentan sehe ist int WPF mit CommandParameter="E" trotzdem habe ich immer noch für jede Taste in WPF ein eigenes KeyBinding

Grüße
Rooky420
 
Zuletzt bearbeitet:
Du könntest evtl. das Keydown Event benutzen.
Dein eigenes Command schreiben und das im Event auslösen. (und dabei natürlich die Taste mit ins Command packen)
 
Danke für deine Antwort.

Aber wie kann ich hierbei das MVVM schema beibehalten? ich kann ja kein Binding auf das KeyDown Event legen.
 
Aber auf dein eigenes Command kannst du ein Binding legen.
Ja ich weiß es entspricht nicht unbedingt dem Schema.

So mal etwas gegoogelt:
Der hatte das gleiche Problem wie du. Die Lösung sieht überraschend kurz aus.
http://stackoverflow.com/questions/31510605/how-to-write-a-handy-mvvm-keylistener

WPF und MVVM hören sich immer so praktisch an aber sobald man irgendwas machen will merkt man das irgendwas nicht funktioniert.
Meistens endet es damit das man eine extra Klasse schreibt die das Problem behebt. Mach das ein paar mal und dein Projekt ist ziemlich voll. (mit potentiellen Fehlerquellen)
Versuch also nicht zu sehr dich an das Schema zu halten - das erspart dir einiges an Frust.
 
Genau. Du musst nicht versuchen alles unbedingt in MVVM abzubilden. Wenn etwas nur sehr kompliziert oder einfach unpraktisch mit Binding geht, führe den Command lieber manuell aus. MVVM war noch nie eine Alles oder nichts Sache, da es noch nie für alle Fälle gute Lösungen gab.
 
Zurück
Oben