Öffnen neuer Fenster in MVVM WPF: Überlegungen zur Schnittstelle
Obwohl das Erstellen einer neuen Fensterinstanz aus dem Ansichtsmodell heraus gegen MVVM-Prinzipien verstößt, kommt es häufig vor Schnittstellen zu implementieren, um die Komplexität des Öffnens von Fenstern zu abstrahieren. Allerdings schränkt die enge Kopplung der Schnittstelle an einen bestimmten Fenstertyp, wie z. B. ChildWindow, die Flexibilität ein.
Generische Schnittstellenlösung
Um dieses Problem zu beheben, sollten Sie eine allgemeinere Schnittstelle in Betracht ziehen Design:
interface IWindowService { void OpenWindow<TWindow>(object dataContext) where TWindow : Window, new(); }
Diese Schnittstelle ermöglicht es Ihnen, den Fenstertyp als generischen Parameter anzugeben, sodass der Dienst jeden von Ihnen verwendeten Fenstertyp verarbeiten kann bestanden.
WindowService-Implementierung
Die WindowService-Implementierung kann dann werden:
class WindowService : IWindowService { public void OpenWindow<TWindow>(object dataContext) where TWindow : Window, new() { var window = new TWindow(); window.DataContext = dataContext; window.Show(); } }
Modellverwendung anzeigen
In Ihrem Ansichtsmodell können Sie den Dienst verwenden, um neue Fenster zu öffnen benötigt:
public void OpenChildWindowCommandExecute() { _windowService.OpenWindow<ChildWindow>(this); }
Fazit
Dieser generische Schnittstellenansatz ermöglicht es Ihnen, neue Fenster aus dem Ansichtsmodell zu erstellen und zu öffnen, ohne die MVVM-Prinzipien zu verletzen. Es bietet Flexibilität, indem es die Verwendung jedes Fenstertyps ermöglicht und die Wiederverwendung und Wartbarkeit von Code fördert.
Das obige ist der detaillierte Inhalt vonWie kann ich neue Fenster in der MVVM-Architektur von WPF öffnen, ohne deren Prinzipien zu verletzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!