EventAggregator

Messages postés
34
Date d'inscription
lundi 19 février 2018
Dernière intervention
28 novembre 2018
- - Dernière réponse : Whismeril
Messages postés
12388
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
- 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.
Afficher la suite 

Votre réponse

1 réponse

Messages postés
12388
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
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.
CH4BRN
Messages postés
34
Date d'inscription
lundi 19 février 2018
Dernière intervention
28 novembre 2018
-
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.)
Whismeril
Messages postés
12388
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
Il avait beaucoup d'humour
Whismeril
Messages postés
12388
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.