EventAggregator

CH4BRN 29 Messages postés lundi 19 février 2018Date d'inscription 19 juin 2018 Dernière intervention - 27 févr. 2018 à 11:47 - Dernière réponse : Whismeril 11642 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention
- 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

4 réponses

Whismeril 11642 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 27 févr. 2018 à 13:53
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 29 Messages postés lundi 19 février 2018Date d'inscription 19 juin 2018 Dernière intervention - 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.)
Whismeril 11642 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 27 févr. 2018 à 19:13
Il avait beaucoup d'humour
Whismeril 11642 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 27 févr. 2018 à 21:19
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.