Je veux faire de ma MainWindow un singleton parce que je veux faciliter l'accès à partir de toutes les autres fenêtres de mon application. Mais je ne pouvais pas le faire fonctionner. Voici ce que j'ai fait.Comment rendre mon WPF MainWindow un singleton?
Comme d'habitude, j'ai rendu privé l'entrepreneur MainWindow et j'ai créé une propriété public static MainWindow Instance
pour renvoyer une instance statique. Lorsque je l'exécute sans aucun autre changement, j'ai l'erreur "No Source Available". J'ai cherché sur Internet et trouvé un sujet connexe au http://www.netframeworkdev.com/windows-presentation-foundation-wpf/xamlc-singleton-class-80578.shtml. Cependant, je ne pouvais pas le faire fonctionner comme suggéré ici. Certains suggèrent de faire un changement dans MainWindow.xaml de
<Window x:Class="TestApp.MainWindow"
à
<Window x:Class="TestApp.MainWindow.Instance"
Ce qui semble logique. Cependant, quand j'ai fait cela, j'ai eu des tonnes d'erreurs de compilation (la première dit que l'espace de noms TestApp contient déjà une définition de 'MainWindow'.)
J'ai trouvé de nombreux articles sur Internet sur la façon de créer une application mono-instance. Je ne cherche pas ça. Je veux juste faire de ma MainWindow un singleton. Je l'ai fait dans les applications WinForm plusieurs fois.
Vous devez le faire dans un constructeur statique ou paresseusement dans le getter 'Instance'. De même, pour singleton, vous rendez généralement les constructeurs privés. Dans votre exemple, les consommateurs peuvent créer plusieurs instances de MainWindow et la dernière sera affectée à 'Instance' –
Au moins si vous voulez implémenter correctement le pattern singleton. Ce code fonctionnera évidemment dans le sens où d'autres classes peuvent accéder à la fenêtre principale de la propriété 'Instance', mais ce n'est pas" pur "singleton IMHO –
Oui, je suis d'accord. Voir le code modifié. – Yogesh