WPF Controllare se una finestra è già aperta

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();
    }