2016-04-28 4 views
1

Unsere Anwendung wird in WPF mit MVVM Light implementiert.So lösen Sie das gleiche Ereignis auf jeder Seite der WPF App mit MVVM Light aus

Wir ersetzen unseren alten Magnetkartenleser, der derzeit seriell ist, mit einem USB HID-KB. Serielle Kartenleser waren einfach, da wir serielle Port-Ereignisse hatten, um die eingehenden Nachrichten auszulösen, wir hatten kein Problem damit umzugehen. Aber mit USB-Kartenleser sind die Ereignisse die einer normalen Tastatur. Übrigens hat der Kartenleser keine herstellerspezifische API, dies ist ein generisches USB-Gerät.

Ab sofort besteht die Lösung darin, ein Keydownevent in der Ansicht zu erfassen und die Geschäftslogik auf dem Viewmodel abzubilden.

Aber das Problem hier ist, dass der Endbenutzer die Karte unabhängig davon wischen kann, auf welcher Seite er/sie sich befindet. Wir sollten in der Lage sein, dieses Swipe-Ereignis zu erfassen. Die einzige Option, die ich derzeit habe, ist, dass ich dieses Keydownevent in jeder Hinsicht wie oben erwähnt verbinden muss.

Gibt es in MVVMLight oder WPF eine Möglichkeit, ein Ereignis auf globaler Ebene zu deklarieren, die von jeder Ansicht ausgelöst werden kann.

Alle Hinweise werden sehr geschätzt.

Danke,

Antwort

1

Die Lösung ist sehr einfach. Warum behandeln Sie das Ereignis nicht in einer gemeinsamen Datei wie der Basisdatei? Normalerweise behandeln wir Ereignisse zum Schließen von Anwendungen in solchen Basisdateien, die immer aktiv sind. Die Sache ist, ich habe einige Bedingungen zu überprüfen, während die Anwendung schließt. Also behandle ich das Ereignis in der gemeinsamen Basisdatei und überprüfe dort die Bedingung.

Bitte versuchen Sie das und lassen Sie mich wissen, das Ergebnis ..

+0

Vielen Dank für Ihre Antwort, aber das Problem ist hier nicht mit dem Handler, ich habe es schon in der viewmodelbase Klasse hinzugefügt, ich brauche einen Weg, um das Event hinzufügen . Die einzige Möglichkeit, die mir derzeit bekannt ist, besteht darin, sie in jeder Ansicht hinzuzufügen. – brb

+0

Warum möchten Sie in jeder Ansicht arbeiten? Müssen Sie die Daten in der aktuellen Ansicht anzeigen? Ich sagte, wenn Sie es in der Hauptdatei xaml.cs behandeln. dh die Hauptansichtsdatei, die andere Ansichten enthält, unabhängig von der Ansicht, können Sie das Ereignis an einem Ort erhalten. – ViVi

+0

Wir haben keine Hauptansicht, die alle anderen Ansichten enthält, jede Ansicht ist für sich allein. – brb