EventAggregator

CH4BRN
Messages postés
51
Date d'inscription
lundi 19 février 2018
Statut
Membre
Dernière intervention
6 février 2021
- 27 févr. 2018 à 11:47
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
- 27 févr. 2018 à 21:19
Bonjour à tous !

Je suis en train de travailler/apprendre à passer des paramètres entre des vues en WPF, en utilisant prism, mais comme mon prism n'est pas à jour (et ne permet donc pas de passer des paramètres avec le requestNavigate) et que je ne peux pas le mettre à jour, je dois donc utiliser une autre méthode.

On m'a donc orienté sur l'EventAggregator.

Voila mon problème :

J'ai une variable _text :

   /// <summary>
        /// Var for the text
        /// </summary>
        private string _text;


Une variable Text qui quand elle est modifiée assigne sa valeur à un event

/// <summary>
        /// Textblock's text
        /// </summary>
        public string Text
        {
            get => _text;

            set
            {

                _text = value;
                this.RaisePropertyChanged(() => this.Text);

                Answer = new ResponseEvent { ResponseFile = _text };

                
                
            }
        }


Une variable Answer de type ResponseEvent qui quand elle est modifiée, publie l'event :

  public ResponseEvent Answer
        {
            get => _responseEvent;
            set
            {
                _responseEvent = value;
                bool success = false;

                try
                {
                    this.EventAggregator.GetEvent<ResponseEvent>().Publish(Answer);

                    success = true;
                }
                catch (Exception e)
                {
                    success = false;
                    Console.WriteLine(e.Message);
                }
                finally
                {
                    if (success)
                    {
                        Console.WriteLine("PUBLISHED");
                        this.EventAggregator.GetEvent<ResponseEvent>().Publish(Answer);
                    }
                    else
                    {
                        Console.WriteLine("NOT PUBLISHED");
                    }
                }
            }
            
        }


ReponseEvent :

    public class ResponseEvent : CompositePresentationEvent<ResponseEvent>
    {
        public string ResponseFile { get; set; }

        override
            public string ToString()
        {
            return ResponseFile.ToString();
        }
    }




Théoriquement, tout se passe bien jusqu'à la publication, puisque ma console affiche bien "PUBLISHED", mais quand je suis sur ma page de exception", j'ai une levée d'exception avec le constructeur :

 public secondPageModel()
        {
            bool success = false;
            SubscriptionToken token;
            InitializeCommand();
            try
            {
                token = this.EventAggregator.GetEvent<ResponseEvent>().Subscribe(this.OnResponse);
                if ( token != null)
                {
                    success = true;
                }
               
            }catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }finally
            {
                if ( success)
                {
                    Console.WriteLine("SUBSCRIBED");
                    this.EventAggregator.GetEvent<ResponseEvent>().Subscribe(this.OnResponse);
                }
            }

            
          
        }


ERREUR :

Exception thrown: 'System.NullReferenceException' in HelloWorld.dll
La référence d'objet n'est pas définie à une instance d'un objet.
The program '[4240] Launcher.exe' has exited with code 0 (0x0).



Quelqu'un pourrait il m'expliquer ?

Merci infiiiiiniment.

1 réponse

Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
27 févr. 2018 à 13:53
Bonjour
Je ne sais pas directement résoudre ton problème.
Cependant, pour t’aider à cibler l’erreur, au lieu d’écrire e.Message dans la console, je te propose d’écrire e.StackTrace. Tu auras plein d’informations dont le fichier incriminé (un try peut très bien remonter un erreur d’un autre fichier) et le numéro de ligne.
Une fois que tu connais ça, tu y vas, pour y mettre un point d’arrêt et voir ce qui ce passe à l’exécution.
0
CH4BRN
Messages postés
51
Date d'inscription
lundi 19 février 2018
Statut
Membre
Dernière intervention
6 février 2021

Modifié le 27 févr. 2018 à 16:04
Ok! Merci du conseil, je vais tenter de résoudre ça de mon côté :)
je suis toujours preneur des remarques que vous pourriez faire et des conseils que vous pourriez donner.
:)
(J'aime beaucoup la citation de ta signature.)
0
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
27 févr. 2018 à 19:13
Il avait beaucoup d'humour
0
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
27 févr. 2018 à 21:19
0