Ich lief gerade in das gleiche Problem und fand Probleme, die den Besitzer mit MVVM ohne die App in der Produktion zum Absturz zu bringen. Ich habe ein Fenster-Manager-Ansicht-Modell, das einen Befehl zum Öffnen eines Fensters mit der Uri des Fensters enthält - und ich war nicht in der Lage, den Besitzer zu App.MainWindow ohne die App Absturz zu setzen.
Also - Anstatt den Eigentümer zu setzen, habe ich die TopMost-Eigenschaft des Fensters an eine Eigenschaft in meinem Window Manager View-Modell gebunden, die angibt, ob die Anwendung gerade aktiv ist. Wenn die Anwendung aktiv ist, befindet sich das Fenster oben, wie ich es möchte. Wenn es nicht aktiv ist, können andere Fenster es verdecken.
Hier ist, was ich zu meinem View Model hinzugefügt habe:
public class WindowManagerVM : GalaSoft.MvvmLight.ViewModelBase
{
public WindowManagerVM()
{
App.Current.Activated += (s, e) => IsAppActive = true;
App.Current.Deactivated += (s, e) => IsAppActive = false;
}
private bool _isAppActive = true;
public bool IsAppActive
{
get => _isAppActive;
set
{
if (_isAppActive != value)
{
_isAppActive = value;
RaisePropertyChanged(() => IsAppActive);
}
}
}
}
Hier ist die XAML, die es implementiert (ich verwende MVVM light mit einem ViewModelLocator als statische Ressource in meiner App namens Locator):
<Window Topmost="{Binding WindowManager.IsAppActive, Source={StaticResource Locator}}"/>
0 Stimmen
Übrigens kann ich für dieses Fenster keinen Eigentümer festlegen, da dieses Fenster vor allen anderen Fenstern erstellt wird (es ist der Startbildschirm der Anwendung). Ref: stackoverflow.com/questions/2463149/
0 Stimmen
Auch wenn die Frage schon etwas älter ist, muss ich doch diese Anmerkung machen... Ihre Frage und der Kommentar sind ziemlich seltsam, Sie wollen Ihr Fenster oben in Ihrer Anwendung haben, aber in Ihrem Kommentar geben Sie an, dass keine Anwendung läuft, da es das erste Fenster (Startbildschirm) ist, also wie kann Ihr Fenster oben auf einer nicht vorhandenen Anwendung sein?!? Ich frage mich, wie um alles in der Welt diese Frage 16 positive Bewertungen erhalten konnte.
1 Stimmen
Wenn die App startet, gibt es kein anderes Fenster, sondern das Hauptfenster erscheint kurz danach und muss hinter dem Startbildschirm bleiben, bis alles geladen ist.
1 Stimmen
Warum dann nicht den Splashscreen als erstes Fenster starten lassen und wenn er fertig ist, das Hauptfenster öffnen? Ändern Sie einfach die StartupUri der Anwendung auf den Splashscreen. ( msdn.microsoft.com/de-us/library/ )