Я хотел бы знать, что лучший способ (читайте наиболее элегантный), чтобы иметь один экземпляр данного окна для каждого приложения в WPF.
Я новичок в .NET и WPF, и то, что я придумал, выглядит довольно хромым.
private static readonly Object MUTEX = new Object();
private static AboutWindow INSTANCE;
public static AboutWindow GetOrCreate() {
lock (MUTEX) {
if (INSTANCE == null) {
INSTANCE = new AboutWindow();
}
INSTANCE.Show();
return INSTANCE;
}
}
private AboutWindow() {
InitializeComponent();
}
private void AboutWindow_Closed(object sender, EventArgs e) {
// the Closed events are handy for me to update values across
// different windows.
lock (MUTEX) {
INSTANCE = null;
}
}
Вещь... это выглядит как полное дерьмо. Должен быть какой-то способ достичь той же цели гораздо более элегантным способом, верно?
PS: Я часто использую событие Closed
для изменения значений в других открытых окнах. Например, у меня есть SettingsWindow с кнопкой "Учетная запись". Когда я нажимаю эту кнопку, появляется сообщение AccountWindow. Когда я закрываю AcountWindow, я хочу что-то изменить в SettingsWindow (метка). Следовательно, постоянное создание окон.
Кроме того, Close - это то, с чем вам всегда приходится иметь дело, потому что кнопка X на рамке окна...