Zwischen Ansichten navigieren

In der POS-Anwendung können Sie eine beliebige Anzahl der Ansichten in verschiedenen Modi (Basisansicht, Modal View oder Message View) ausführen, wobei es kann gleichzeitig nur ein Modus von jeder Gruppe aktiv werden. Alle anderen geöffneten Ansichten bzw. Views gelten als nicht aktiv. In jeder Basisansicht können Sie jederzeit das Fenster zum Umschalten zwischen den Hauptansichten (Navigationsmenü) aufrufen, um die ausgewählte andere Ansicht zu aktivieren, die zuvor geöffnet und nicht geschlossen wurde (inaktiv geworden ist). Sie können das Navigationsmenü weder in dem Modal View, noch im Message View aufrufen.

Navigationsmenü

Sie können das Navigationsmenü mit der Tastenkombination STRG+TAB oder mit der Taste  aufrufen, die im Statusbereich neben der Uhr sichtbar ist. In diesem Fenster werden die geöffneten Basisansichten als farbige Kacheln mit einem Titel, einem Icon und/oder einer zusätzlichen Beschreibung dargestellt. Sie können den Kacheltitel mit der Header-Eigenschaft in der View-Klasse oder mit der SwitchHeader-Eigenschaft im ViewModel festlegen (wenn Sie wollen, dass er sich von der Kopfzeile der Anwendung unterscheidet). Das Icon, sowie die Farbe kann über Styles in der Datei ModernUI.xaml festgelegt werden. Die Einstellung von Farbe und Icon entspricht der Definition von Farbe und Symbol für die zu beschreibende Kachel im Dashboard. Wenn die Ansicht also bereits im Dashboard registriert wurde, übernimmt die Kachel im Navigationsmenüfenster die Farbe und das Icon wie die Kachel im Dashboard, vorausgesetzt, dass der in der RegisterMenuTile-Methode verwendete Resources-Schlüsselwert (erstes Argument) mit dem Wert der HeaderLayoutId-Eigenschaft in der code-behind-Ansicht übereinstimmt. In diesem Fall sind die Namen unterschiedlich, deswegen ist es notwendig, zusätzliche Einträge in ModernUI.xaml einzugeben.

Definieren von Farbe und Icon der Kachel im Navigationsmenü für die Beispielansicht OrdersView in ModernUI.xaml:

<SolidColorBrush x:Key="OrdersViewId.Default.Background" Color="Red" />
<models:ImageKey x:Key="OrdersViewId.Default.ImageKey" SvgValue="ListIcon" />

Beachten Sie, dass OrdersViewId in diesem Beispiel ein Wert ist, der in der Ansichtsklasse dem HeaderLayoutId zugeordnet ist.

Darüber hinaus ist es möglich, eine zusätzliche Beschreibung in der Kachel hinzuzufügen (genau wie Sie das in der Kachel neue Neue Bestellung auf dem Screenshot sehen können). Die Eigenschaft SwitchHeader2 im View Model ist für einen solchen Text zuständig.

Ansichten ausführen

Die Ansichten können in verschiedenen Modi (Basisansicht, Modal View oder Message View) ausgeführt werden. Sie können steuern, ob diese Ansicht unabhängig von anderen Ansichten geöffnet werden soll (ein separates Element im Navigationsmenüfenster) oder ob es ein untergeordneter Prozess des aktuell aktiven Elements sein soll (es gibt kein neues Element im Navigationsmenü). Wenn Sie die Ansicht öffnen, können Sie den Parameter IsPreviewMode festlegen (er öffnet die Ansicht im schreibgeschützten Modus, die meisten Steuerelemente werden automatisch zur Bearbeitung gesperrt) und eine beliebige Anzahl eigener Parameter.

Die Ansichten können über die in der ViewModelBase-Klasse und dem IViewManager-Server verfügbaren Methoden. Der einfachste Weg, eine Basisansicht zu öffnen, besteht darin, die OpenView<TView> () -Methode aufzurufen, wobei TView der Name der Ansichtsklasse ist, die Sie öffnen oder aktivieren möchten, wenn sie bereits geöffnet ist. Zusätzliche Parameter:

  • isChild (bool) – der Parameter bestimmt, ob die Ansicht, die ausgeführt werden soll, ein untergeordneter Prozess der aktuell aktiven Ansicht sein soll,
  • parameters (NavigationParameters) – mit dem Parameter können Sie eine beliebige Anzahl eigener Parameter an das View Model der auszuführenden Ansicht übergeben
  • isPreviewMode (bool) – Parameter, der bereits im Viewmodel-Konstruktor der Ansicht, der ausgeführt wird, verfügbar ist (im Gegensatz zu parameters, die nur in den Viewmodel-Initialisierungsmethoden verfügbar sind, dazu mehr hier Aufrufereihenfolge von ViewModel-Methoden während der NavigierungNachträgliche Anordnung). Dieser Parameter wird verwendet, um die Ansicht im Vorschaumodus (mit eingeschränkter Funktionalität) zu öffnen. Wenn dieser Parameter auf true gesetzt wird, wird die Eigenschaft IsPreviewMode in der Klasse ViewModelBase schreibgeschützt. Darüber hinaus werden die Steuerelemente TextBox, SwitchBox, RadioButton, NumericTextBox, ComboBox und CheckBox aus dem Bereich POS.Presentation.Core in den schreibgeschützten Modus versetzt, solange sich eines von ihnen in dieser Ansicht befindet.

Um eine Ansicht im Modal View zu öffnen, verwenden Sie die Methode:

OpenView<TView> (), wobei TView der Name der Ansichtsklasse ist, die Sie öffnen oder aktivieren möchten, wenn sie bereits geöffnet ist. Zusätzliche Parameter:

  • parameters (NavigationParameters) – analogisch wie für OpenView
  • isPreviewMode (bool) – analogisch wie für OpenView

Die Methode hat keinen isChild-Parameter, da alle Modal Views im hierarchischen Modus geöffnet werden (sie sind der untergeordnete Prozess der Ansicht, die sie geöffnet hat). Die Ausnahme ist, dass es keinen Bezug zwischen den verschiedenen Arten von Ansichten gibt. Wenn Sie also zum Beispiel das Modal View von der aktiven Basisansicht öffnen, wird kein parent-child Bezug erfasst.

Um die Ansicht in Message View zu öffnen, ist folgendes zu tun: Stellen Sie erstens in xaml die Ansicht der horizontalen Ausrichtung ein:

<core:View x:Class="Comarch.POS.Presentation.Sales.Views.OrdersView"
                      HorizontalAlignment="Stretch"
…

Zweitens rufen Sie folgende Methode auf:

OpenView<TView> (), nur im Service von ViewManager verfügbar,  wobei TView der Name der Ansichtsklasse ist, die Sie öffnen möchten. Analogisch zu ModalView erfolgt der parent-child Bezug immer mit Ausnahme der Bezüge zwischen verschiedenen Ansichtstypen. Zusätzliche Parameter:

  • parameters (NavigationParameters) – analogisch wie für OpenView und OpenModalView,
  • isPreviewMode (bool) – analogisch wie für OpenView und OpenModalView,

Wenn wir nur eine einfache Meldung oder Frage mit beliebigen Schaltflächen anzeigen möchten, müssen wir nur MonitService verwenden. Dort sind folgende Methoden verfügbar:

  • ShowInformation – die Methode zeigt das Message View mit beliebigem Inhalt und der Schaltfläche OK an,
  • ShowError- die Methode zeigt das Message View mit dem Inhalt der Fehlmeldung und der Schaltfläche OK an,
  • ShowQuestion- die Methode zeigt das Message View mit beliebigem Inhalt und den JA/NEIN-Schaltflächen,
  • Show- die Methode zeigt das Message View mit beliebigem Inhalt und beliebigen Schaltflächen an, die vordefiniert wurden (OK, JA/NEIN) oder beliebiger Anzahl einzehlner Schaltflächen.

Mehr über Meldungen im Kapitel Meldungen.

eine Ansicht schließen

Wenn Ansichten geschlossen werden, haben Sie Methoden zum Schließen der aktuellen aktiven Ansicht, eine Methode zum Schließen der ausgewählten Ansicht (mit der Möglichkeit, alle Vorfahren zu schließen). Wenn Sie die Ansicht schließen, können Sie, ähnlich wie beim Öffnen, zusätzliche benutzerdefinierte Parameter hinzufügen, die an die Ansicht übergeben werden, die beim Schließen der aktuellen Ansicht aktiviert wird.

Wenn Sie die aktive Ansicht schließen, wird immer die Ansicht aktiviert, aus der die zu schließende Ansicht zuvor geöffnet wurde. Wenn sich die Ansichten in einem parent-child -Bezug befinden (wenn Sie die Ansicht IsChild=true öffnen), kehren Sie beim Schließen der untergeordneten Ansicht zur übergeordneten Ansicht zurück

Verwenden Sie die Methode, um die aktive Ansicht zu schließen:

Im ViewModel müssen Sie die Close ()-Methode aufrufen, die die CloseView-Methode direkt im ViewManager aufruft und ihre Ansicht als Parameter übergibt. Die Close-Methode schließt immer die Ansicht, die mit aktuellem ViewModel verknüpft ist. Zusätzliche Parameter:

  • parameters (NavigationParameters) – Parameter, mit dem Informationen von der zu schließenden Ansicht in die Ansicht übertragen wird, die aktiviert wird.

Um die genannte Ansicht zu schließen (aktiv oder inaktiv), ist die folgende Methode zu verwenden:

CloseView(), die sich im IViewManager-Service befindet. Zusätzliche Parameter der Methode:

  • view (IView) – der Parameter bestimmt, welche Ansicht geschlossen werden soll,
  • closeParents (bool) – der Parameter definiert, ob auch andere Ansichten im parent-child-Bezug (Ansichten, die mit dem Parameter IsChild=true) geschlossen werden sollen. Standardmäßig ist der Wert auf true

Aufruf-Reihenfolge von Navigationsmethoden

Beim Navigieren zwischen Ansichten (Öffnen, Schließen, Umschalten der aktiven Ansicht) werden spezielle Methoden in ViewModels aufgerufen, die für das Navigieren relevant sind. Mit diesen Methoden können Sie die entsprechenden Aktionen ausführen, je nachdem, ob die Ansicht zum ersten Mal geöffnet, erneut aktiviert, deaktiviert oder geschlossen wird. Sie stellen auch die Parameter bereit, die Sie senden können, wenn Sie die Öffnungs- und Schließmethoden aufrufen.

Für die Navigationsmethoden ist die Basisklasse von jedem ViewModel zuständig – ViewModelBase. Das sind folgende Methoden: OnInitialization, OnActivation, OnActivated, OnDeactivted, Dispose und IsTarget. Die entsprechenden Methoden werden während des Öffnungsprozesses sowohl in der Ansicht, aus der wir eine neue öffnen, als auch in der Zielansicht automatisch aufgerufen. Für den Schließvorgang werden bestimmte Methoden in der zu schließenden Ansicht und in der Ansicht aufgerufen, die beim Schließen der aktuellen Ansicht aktiviert wird. Dasselbe gilt für das Umschalten zwischen geöffneten Ansichten. Ein wichtiger Aspekt ist, welche Methoden während einer bestimmten Navigation aufgerufen werden und welche Reihenfolge sie haben.

Der Prozess zum Öffnen, Schließen und Wechseln zwischen den Ansichten wird im folgenden Diagramm dargestellt:

 

Beschreibung der Methoden:

  • IsTarget (ViewModelBase)

Wird aufgerufen, wenn eine Ansicht vor dem Ansichtskonstruktor in allen Viewinstanzen des Viewmodells geöffnet wird, das dem Typ der zu öffnenden Ansicht entspricht. Wenn keine Instanz einer Ansicht, die geöffnet werden kann, vorhanden ist, wird eine neue Ansicht erstellt. Wenn es bereits offene Ansichten dieses Typs gibt, ruft die Methode sich selbst für jedes Viewmodell der Ansicht in der Reihenfolge auf, in der sie geöffnet werden. Wenn eine von ihnen true zurückgibt, wird sie aktiviert. Wenn aber keine vorhandene Ansicht dieses Typs true zurückgibt, wird eine neue Instanz erstellt.

  • OnInitialization (ViewModelBase)

Wird nur im ViewModel aufgerufen, wenn eine neue Ansicht geöffnet wird (neue Instanz, neue Registerkarte). Kein Zugriff auf das übergeordnete Element (ViewManager.GetParentViewModel(this) gibt null zurück).
Hinweis: Öffnen oder schließen Sie keine Ansichten bei dieser Methode!

  • OnActivation (ViewModelBase)

Wird jedes Mal aufgerufen, wenn die Ansicht geöffnet wird oder die Ansicht selbst aktiviert wird. Kein Zugriff auf das übergeordnete Element (ViewManager.GetParentViewModel(this) gibt null zurück).
Hinweis: Öffnen oder schließen Sie keine Ansichten bei dieser Methode!

  • OnActivated (ViewModelBase)

Wird jedes Mal aufgerufen, wenn die Ansicht geöffnet wird oder die Ansicht selbst aktiviert wird.

  • OnDeactivated (ViewModelBase)

Wird aufgerufen, wenn die Ansicht deaktiviert oder geschlossen wird.

  • Dispose (ViewModelBase)

Wird nur dann aufgerufen, wenn die Ansicht geschlossen wird. Ermöglicht das Freigeben nicht verwalteter Ressourcen durch den Garbage Collector oder das Beenden von untergeordneten Threads.

  • OnApplyViewTemplate (View)

Wird in der code-behind-Klasse der Ansicht aufgerufen, einmal nach der Erstellung der Instanz der Ansicht und nach dem Laden aller Komponenten (Steuerelemente) der Ansicht.

Czy ten artykuł był pomocny?