Anwendung Hauptfenster wird null in WPF (mit Caliburn Micro)
Ich entwickle eine WPF-Anwendung die ich brauche, um einen Punkt, um das Hauptfenster der Anwendung in einer Kontrolle. Ich bin mit Caliburn Micro.
Application.Current.MainWindow
ist null
Wie bekomme ich eine Referenz auf die MainWindow
Anwendung in Caliburn Micro?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist komisch, ich habe nur beantwortet dies in einem anderen Beitrag... Versuchen Sie, die
Application.Current.MainWindow
Eigenschaft in derLoaded
Ereignis in derMainWindow.xaml.cs
Datei:1. Verständnis der Anwendung.Aktuelle.MainWindow
Wenn Ihre Anwendung öffnet erstes Fenster (
MainWindow.xaml
), dann das Fenster aufApplication.Current.MainWindow
. Wenn das Fenster geschlossen ist, dann noch aktuell geöffneten Fenster aufApplication.Current.MainWindow
. Wenn es keine geöffneten windows-Anwendung.Aktuelle.MainWindow ist auf null gesetzt.z.B. wenn Sie öffnen
LoginWindow
beim Start dannApplication.Current.MainWindow
wirdLoginWindow
. Wenn Sie in der NäheLoginWindow
, dannApplication.Current.MainWindow
werden kannWindow1
zum Beispiel.2. Zugriff auf die MainWindow-Instanz
wenn Sie wollen, um access-Instanz von MainWindow-Klasse, die Sie tun sollten, folgende:
Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
jedoch, wenn Hauptfenster nicht geöffnet ist, dann wird null zurückgegeben. Versuchen Sie nicht zu umgehen - wenn MainWindow noch nicht geöffnet ist, oder es bereits abgeschlossen ist, sollten Sie nicht auf ihn zugreifen.
3. MVVM
in MVVM-Muster, sollten Sie keine access-Ansichten direkt von Ihrem viewmodels. Wenn ja, würden Sie brechen die großen MVVM Bedenken, wie Separation of concerns, Testbarkeit, etc, etc. Die Frage ist dann, warum Sie wollen, mvvm.
Wenn Sie wollen, um irgendeine Aktion in
MainWindow
sollten Sie die Aktion aufMainWindowViewModel
. Wenn ein Fenster geöffnet wird, es werden die änderungen im ViewModel. Wenn es nicht ist, dann verändert der nicht reflektiert werden.MainWindowViewModel
sollte nicht direktem Bezug zu derMainWindow
Instanz.OfType<MainWindow>()
ist der schwierige Teil, der fehlte