EventAggregator

CH4BRN Messages postés 49 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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
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 49 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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
27 févr. 2018 à 19:13
Il avait beaucoup d'humour
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
27 févr. 2018 à 21:19
0
Rejoignez-nous