wpf erkennen offene Fenster
In meiner WPF-Anwendung (csharp) ich habe ein event-handler, der, wenn er ausgelöst wird, öffnet sich ein neues Fenster (Fenster B) der Anwendung und dem display einige Daten. Jedoch, wenn das Ereignis erneut ausgelöst, wenn das neue Fenster (Fenster B) ist noch offen, ich will nicht, um zu laichen eine andere Instanz von Fenster B, sondern nur aktualisieren Sie die angezeigten Daten in der aktuellen Instanz. Die Frage ist also: Wie erkennen, wenn Fenster B ist schon und nur öffnen, wenn es nicht schon, ansonsten einfach die Daten aktualisieren?
Fand ich die Anwendung.Aktuelle.Fenster Sammlung, aber irgendwie nicht für mich arbeiten noch. Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie eine LoadWindow () - Methode in Fenster B, die Sie anrufen können, um zu laden (oder aktualisieren) die Daten & das wird funktionieren, egal ob das Fenster bereits geöffnet ist oder nicht. Es haben, nehmen Sie einen Delegaten aufrufen, wenn das Fenster geschlossen wird:
und haben Ihre Fenster geschlossen Veranstaltung rufen Sie die close-Delegierter:
Nun, aus Ihrer Klasse, öffnet sich in Fenster B, es festzuhalten, dass die Instanz, die es öffnet, so dass, wenn Fenster B ist bereits geöffnet, wenn jemand versucht, neu zu laden, es ruft einfach nur LoadWindow auf die vorhandene Instanz. So etwas wie...
Und dann kann man nur haben es null aus WinB auf, dass in der Nähe callback also, wenn WinB geschlossen ist, dann das nächste mal LoadWindowB() aufgerufen wird eine neue Instanz davon:
edit: Hoppla, meine Antwort ist speziell für Windows Forms. ich sah jetzt die WPF erwähnen. ich bin mir nicht sicher, was die spezifischen code für WPF, aber ich könnte mir vorstellen, dass es nicht alle, verschiedene, konzeptuell. Ich glaube in WPF die Eigenschaft IsVisible genannt anstelle von Sichtbarem
Sie halten konnte, auf die Instanz des Fensters (oder machen es zu einem Singleton) und dann wenn Sie Sie brauchen, um festzustellen, ob es sichtbar ist oder nicht, überprüfen Sie die Sichtbar-Eigenschaft.
Beispiel:
Dieser Artikel es das beste, das ich gefunden für die übergabe von Daten zwischen WPF-Seiten. Der Autor benutzt KISS-Ansatz, um eine einfache Lösung.
Da dies der erste link von Google gelistet, was geschrieben vor einigen Jahren für eine Lösung zu prüfen, ob eine
Window
bereits geöffnet ist, poste ich meine Antwort, für andere, die finde ich einfacher zu implementieren. DieChildWindow
wird nur aufgerufen, ausMainWindow
so dass keine weiterenWindow
müssen alle Prüfungen.Es ist eine old-school-Weg, dies zu tun, die über eine Schnittstelle. Ich sehe das in Java eine Menge als eine Möglichkeit zum Ausgleich für die nicht Delegierten (korrigiert mich wenn ich falsch Liege). Diese Methode ermöglicht es Ihnen zu überprüfen, ob ein Fenster bereits geöffnet ist (jeglicher Art). Die original-Antwort, funktioniert sehr gut, aber Sie können es auch tun, auf folgende Weise:
Erstellen die Schnittstelle
Implementieren Sie die Schnittstelle auf die Eltern (von denen, die Sie öffnen):
In Ihrem Konstruktor akzeptiert ein Objekt, das den IwindowTracker-Schnittstelle. Speichern Sie die Instanz für die zukünftige Verwendung
Setup die Aufrufe der Fenster-tracker-Objekt
und schließlich die Umsetzung des IWindowTracker in Ihrem übergeordneten WPF-Fenster
Dies ermöglicht es Ihnen zu verfolgen, wenn das Fenster ist immer noch offen und wenn es ist, gibt es keine Notwendigkeit, öffnen Sie eine neue Instanz:
Aufruf von show() auf einem geschlossenen Fenster scheint, werfen Sie eine Ausnahme, so meine Vermutung ist, dass es irgendeine andere Möglichkeit, oder, wenn Sie das Fenster geschlossen haben, wird das Fenster technisch "zerstört"
Das schöne daran ist, dass ich erkennen kann, ob das Fenster noch geöffnet ist und den Fokus auf ihn (so kommt es wieder in den Vordergrund).
HINWEIS: Es ist ein Unentschieden zurück zu diesen, in, dass Sie in diesem setup-es Grenzen, die Sie öffnen nur ein Fenster gleichzeitig (vorausgesetzt, dass alle Ihre windows-umgesetzt werden wie diese). In meinem Fall, habe ich immer nur ein Fenster geöffnet, neben dem Haupt-Fenster.
Vielleicht wollen Sie auch zu prüfen, ob Ihre Fenster null ist oder nicht, wenn man bedenkt, dass es wahrscheinlich nicht das einzige Fenster zu öffnen.