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