Frage

Ich habe gerade angefangen, meine WPF -Anwendung mit Caliburn Micro Framework zu implementieren (ich bin zum ersten Mal damit).

Ich habe konfiguriert AppBootstrapper Klasse und alles funktioniert (mein Hauptfenster wird gezeigt), aber jetzt möchte ich eine komplexere Verhaltensheit meiner App erreichen. Am Anfang möchte ich nur eine zeigen Begrüßungsbildschirm (Es wird einige Daten aus dem Dienst geladen). Danach möchte ich nur eine zeigen Anmeldung Fenster und wenn sich der Benutzer in das System anmäle Hauptsächlich Fenster sollte angezeigt werden.

Erzählen Sie in einem anderen Wort, dass ich diesen Fensterfluss erreichen möchte:

Begrößerungsbildschirm -> Anmeldefenster -> Hauptfenster

Ich habe versucht, so etwas zu implementieren ShellController das würde sich aus ergibt Conductor<IScreen>.Collection.OneActive oder Conductor<IScreen>, aber ich weiß nicht, wie ich es ohne Ansicht für die Schale machen soll (es sollte nur der Controller für die gesamte Anwendung sein).

Meine andere Idee ist es, außer Kraft zu setzen DisplayRootView Methode in AppbootStrapper und dort verwendet IWindowManager Fenster anzeigen. Ist es ein guter Ansatz?

Ich würde für jede Hilfe oder Vorschläge sehr geschätzt.

War es hilfreich?

Lösung

Ja Überschreiben Sie die DisplayRootView und verwenden Sie den iWindowManager, um die verschiedenen Bildschirme / Ansichtsmodelle anzuzeigen.

Etwas wie das:

var windowManager = IoC.Get<IWindowManager>();
windowManger.ShowDialog(IoC.Get<SplashScreenViewModel>());
if(windowManger.ShowDialog(IoC.Get<LoginViewModel>()))
{
   windowManger.ShowWindow(IoC.Get<ShellViewModel>());
}

Andere Tipps

In Caliburn Micro v1.1 die DisplayRootViewFor() Die Methode wurde in statisch geändert. Der empfohlene Ansatz besteht nun darin, die überschreiben OnStartup() Methode in Ihrem Bootstrapper, um die gewünschten Splash- oder Anmeldebildschirme anzuzeigen.

Um das Beenden der Anwendung nach dem Anruf zu vermeiden TryClose() Versuchen Sie auf dem LoginViewModel Folgendes: in Ihrer App.xaml, festgelegt ShutdownMode="OnExplicitShutdown" und Ruf an Application.Shutdown(); Am Ende von DisplayRootView.

Ja, Sie sind in Ihrer Idee um DisplayRootView korrekt. Ich empfehle Ihnen, diese Methode außer Kraft zu setzen und dort Ihre benutzerdefinierten Verhaltensweisen zu implementieren. Sie können den iWindowManager direkt verwenden, um die Fenster anzuzeigen. Wenn Ihre Logik erheblich ist, möchten Sie dies auf jeden Fall in einen einfachen Controller zusammenfassen, der die Start -Ereignisse orchestrieren kann.

Ich versuche, den gleichen Workflow wie das ursprüngliche Poster zu vervollständigen. Wenn ich jedoch Tryclose auf dem LoginViewModel aufrufe, um den Dialog zu schließen, scheint dies die Anwendung zu beenden und die Shell zu schließen, sobald sie geöffnet wird.

Was ist die geeignete Methode, um den Logindialog zu schließen, damit die Anwendung wie gewünscht fortgesetzt werden kann?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top