Si vous n’êtes pas familier avec le Singleton, n’hésitez pas à aller jeter un coup d’œil sur l’article qui y est consacré sur mon blog : DESIGN PATTERN : SINGLETON
Pour cette exemple nous allons créer une nouvelle solution WPF application, avec deux vues, la VueParent qui affiche la notification avec un TextBlock (et qui contient également la vue enfant) et la VueEnfant avec un bouton qui envoi une notification.
Nous allons également créer la classe SingletonNotification qui contiendra le Singleton et le code pour gérer la notification.

VueParent et VueEnfant
SingletonNotification
Nous allons commencer par créer la classe du Singleton avec le code pour gérer la notification.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
internal class SingletonNotification { #region Singleton protected SingletonNotification() { } private static SingletonNotification _instance; public static SingletonNotification Instance() { if (_instance == null) { _instance = new SingletonNotification(); } return _instance; } #endregion #region Notification //TextBlock affichant la notification private TextBlock _textBlockNotification; //Setter qui empèche de changer le TextBlock de destination public TextBlock TextBlockNotification { set { if (_textBlockNotification == null) { _textBlockNotification = value; } } } //Méthode appelée pour afficher la notification public void AfficherNotification(string pMessage) { _textBlockNotification.Text = pMessage; } #endregion } |
Pour gérer la notification nous avons, un TextBlock en private, un setter pour qui ne permet de l’ajouter qu’une seule fois et la méthode qui sera utilisée pour envoyer la notification (Notez que je n’ai fais que le code de base sans vérification des valeurs par soucis de lisibilité)
VueParent
Dans la vue parent nous avons un simple Grid avec deux lignes avec sur la première la vue enfant et sur la deuxième le TextBlock qui affichera la notification. Mais nous avons surtout l’événement Loaded déclaré dans la balise de l’UserControl qui permettra de récupérer le TextBlock. (je n’ai pas affiché le code XAML de la vue car il est très simple et en plus je met à disposition la solution complète en bas de page)
1 2 3 4 |
private void UserControl_Loaded(object sender, RoutedEventArgs e) { SingletonNotification.Instance().TextBlockNotification = txtb_notification; } |
Au démarrage de l’application, au moment où la vue parent est instanciée (Événement Loaded), nous allons venir chercher l’endroit où afficher la notification (ici un TextBlock) et le sauvegarder dans le Singleton.
VueEnfant
Dans la vue enfant nous avons un simple bouton avec l’événement Click qui se chargera d’envoyer un texte de notification.
1 2 3 4 |
private void btn_notification_Click(object sender, RoutedEventArgs e) { SingletonNotification.Instance().AfficherNotification("Notification : Hello world"); } |
La destination de la notification étant enregistrée, nous n’avons plus qu’à l’appeler pour afficher notre message et le tour est joué.
Voici un .zip contenant la solution de l’exemple complet : SingletonEtNotification
Évidement l’exemple que j’explique ici est très simple, et nous n’avons pas besoin de Singleton, mais dans le cadre de mon travail il m’est souvent arrivé que j’ai beaucoup de vues imbriquées et pour éviter d’avoir énormément d’endroit différent selon la vue pour afficher les notifications, j’ai choisi de ne les envoyés qu’à un seul endroit de ma vue parent.