Voglio rendere il mio MainWindow un singleton perché voglio rendere più facile l'accesso da tutte le altre finestre della mia app. Ma non potevo farcela. Ecco cosa ho fatto.Come rendere la mia WPF MainWindow un singleton?
Come al solito, ho reso privato l'appaltatore MainWindow e creato una proprietà public static MainWindow Instance
per restituire un'istanza statica. Quando l'ho eseguito senza altre modifiche, ho ricevuto l'errore "Nessuna fonte disponibile". Ho cercato su Internet e ho trovato un argomento correlato a http://www.netframeworkdev.com/windows-presentation-foundation-wpf/xamlc-singleton-class-80578.shtml. Tuttavia, non ho potuto farlo funzionare come suggerito lì. Alcuni suggeriscono di fare un cambiamento in MainWindow.xaml da
<Window x:Class="TestApp.MainWindow"
a
<Window x:Class="TestApp.MainWindow.Instance"
che sembra logico. Tuttavia, quando ho fatto questo, ho ricevuto un sacco di errori di compilazione (il primo dice che lo spazio dei nomi TestApp contiene già una definizione di 'MainWindow').
Ho trovato molti articoli su Internet su come creare un'app di istanza singola. Non sto cercando questo. Voglio solo rendere la mia MainWindow un singleton. L'ho fatto nelle app WinForm molte volte.
Devi farlo in un costruttore statico o pigramente nel getter 'Instance'. Inoltre, per singleton di solito rendi privati i costruttori. Nel tuo esempio, i consumatori possono creare più istanze di MainWindow e l'ultima sarà assegnata a 'Instance' –
Almeno se si desidera implementare correttamente il modello singleton. Questo codice funzionerà ovviamente nel senso che altre classi possono accedere alla finestra principale dalla proprietà 'Instance', ma non è" puro "singleton IMHO –
Sì, sono d'accordo. Vedi il codice modificato. – Yogesh