Quiero hacer de MainWindow un singleton porque quiero facilitar el acceso desde todas las demás ventanas de mi aplicación. Pero no pude hacerlo correr. Aquí esta lo que hice.¿Cómo hacer que mi WPF MainWindow sea singleton?
Como de costumbre, hice que el contratista de MainWindow sea privado y creé una propiedad public static MainWindow Instance
para devolver una instancia estática. Cuando solo lo ejecuto sin ningún otro cambio, obtuve el error "No hay fuente disponible". Busqué en Internet y encontré un tema relacionado en http://www.netframeworkdev.com/windows-presentation-foundation-wpf/xamlc-singleton-class-80578.shtml. Sin embargo, no pude hacer que funcione como se sugiere allí. Algunos sugieren que hacer un cambio en MainWindow.xaml de
<Window x:Class="TestApp.MainWindow"
a
<Window x:Class="TestApp.MainWindow.Instance"
que parece lógico. Sin embargo, cuando hice esto, obtuve un montón de errores de compilación (el primero dice que el espacio de nombres TestApp ya contiene una definición de 'MainWindow').
Encontré muchos artículos en Internet sobre cómo hacer aplicaciones de instancia única. No estoy buscando esto. Solo quiero hacer de MainWindow un singleton. Lo he hecho en aplicaciones WinForm muchas veces.
Tienes que hacer esto en un constructor estático o perezosamente en el getter 'Instance'. Además, para singleton generalmente haces que los constructores sean privados. En su ejemplo, los consumidores pueden crear múltiples instancias MainWindow y la última será asignada a 'Instance' –
Al menos si desea implementar correctamente el patrón singleton. Este código obviamente funcionará en el sentido de que otras clases pueden acceder a la ventana principal desde la propiedad 'Instance', pero no es singleton" puro "IMHO –
Sí, estoy de acuerdo. Ver el código modificado. – Yogesh