Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann man unter WPF ein neues Fenster MVVM-konform öffnen?

Moderationshinweis von MrSparkle (22.10.2020 - 12:36:11):

Abgeteilt von Wie verschiedene Windows mit MVVM synchron halten?

JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 225

Themenstarter:

beantworten | zitieren | melden

Nochmal dazu eine Frage:

Bisher habe ich es so gemacht:
im MainWindowViewModel habe ich einen Command der ein neues Fenster öffnet, dem das zugehörige ViewModel zuweist und den DbService mitgibt.

Jetzt sollte die UI Schicht ja eigentlich von den ViewModels komplett getrennt sein. Also das MainWindoViewModel das zweite Fenster gar nicht kennt.

Wie mache ich das am besten, dass ich das in XAML definiere? Also einen Command der ein neues Fenster öffnet, ViewModel mitgibt. Brauche ich für sowas dann doch Codebehind?
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5961
Herkunft: Leipzig

beantworten | zitieren | melden

Das Thema wurde bereits mehrfach besprochen, z.B. hier: WPF: Öffnen eines neuen Windows

Kurz gesagt gibt es folgende Möglichkeiten:
  • Window.Show() im Command aufrufen und damit das MVVM-Pattern zu verletzen,
  • Einen WindowsService implementieren oder eine fertige Implementierung aus einem MVVM-Framework verwenden,
  • Gar keine Fenster verwenden, sondern Bereiche im Hauptfenster ein- und ausblenden


Ich selbst benutze im Prinzip nur die letzte Variante, das ist am einfachsten umzusetzen (über ein DataTemplate pro Bereich) und am übersichtlichsten für den Benutzer.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

Du kannst auch mal in meiner Antwort hier schauen:
Object von Window zu Window weiter geben

Unten im Beitrag habe ich ein paar Möglichkeiten für diese Problematik aufgelistet.
Der dort erwähnte ViewManager entspricht dabei dem WindowsService, den MrSparkle nannte.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 225

Themenstarter:

beantworten | zitieren | melden

Zitat von MarsStein
Der dort erwähnte ViewManager entspricht dabei dem WindowsService, den MrSparkle nannte.

Danke für den Tipp!


    public interface IWindowManager
    {
        void ShowOrderWindow(OrderViewModel order);
...
    }

So habe ich es jetzt gemacht, das MainViewModel initalisiert den WindowManager, und nutzt den Manager dann um die Fenster aufzurufen.
Dann ist der Manager ein Ausbruch aus dem Pattern. Aber ich denke noch ein recht übersichtlicher

Danke euch!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JimStark am .
private Nachricht | Beiträge des Benutzers