EventAggregator

Signaler
Messages postés
51
Date d'inscription
lundi 19 février 2018
Statut
Membre
Dernière intervention
6 février 2021
-
Messages postés
15931
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 mai 2021
-
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

Messages postés
15931
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 mai 2021
545
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.
Messages postés
51
Date d'inscription
lundi 19 février 2018
Statut
Membre
Dernière intervention
6 février 2021

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.)
Messages postés
15931
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 mai 2021
545
Il avait beaucoup d'humour
Messages postés
15931
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 mai 2021
545