Il problema che a volte si pone è quello di identificare se una finestra è già aperta per evitare di aprirla nuovamente: in caso di finestra già aperta, si provvederà a rivisualizzarla, portandola in primo piano ed eventualmente passando i parametri ed invocando i metodi necessari. In caso di finestra chiusa, semplicemente si richimaerà il metodo Show().
Innanzitutto creiamo un modulo che effettui il controllo sulla finestra aperta restituendo un booleano:
public static bool IsWindowOpen<T>(string name = "") where T : Window { return string.IsNullOrEmpty(name) ? Application.Current.Windows.OfType<T>().Any() : Application.Current.Windows.OfType<T>().Any(w => w.Name.Equals(name)); }
Possiamo ora chiamare la funzione da un qualsiasi punto del codice ed effettuare le operazioni necessario:
if (IsWindowOpen<WindowsToOpen>()) { //La finestra è già aperta e quindi la richiamo WindowsToOpen win = Application.Current.Windows.OfType<WindowsToOpen>().Where(w => w.Name.Equals("WindowsName")).FirstOrDefault(); //Passo eventuali parametri win.Parametro1 = valore; //... //Chiamo eventuali metodi win.ShowData(); win.Activate(); } else { //La finestra è chiusa e quindi la apro WindowsToOpen win = new WindowsToOpen(); //Passo eventuali parametri win.Parametro1 = valore; win.Show(); }