Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Zwei Aufrufe der gleichen Property nur ein NullReferenzException
behindyoû
myCSharp.de - Member



Dabei seit:
Beiträge: 20

Themenstarter:

Zwei Aufrufe der gleichen Property nur ein NullReferenzException

beantworten | zitieren | melden

Guten Abend.

Mein anliegen mag wohl für den ein oder anderen etwas kleinlich erscheinen doch löst es in mir derzeit einige Fragezeichen aus.
Ich veröffentliche in meinem VM1 ein Event (Nutze das eventAggregator von prism)
und wechsle zu meiner Ansicht 2.
Meine V2 besitzt ein ContentControl indem ich mir V3 anzeigen lassen.



                regionManager.RequestNavigate("ShellRegion", "V1");
                eventAggregator.GetEvent<AccountIDEvent>().Publish(Acc);

VM2 und VM3 greifen auf das Event zu.


// VM 2        
        public VM2(IEventAggregator _ea)
        { 
            ea = _ea;
            _token = eventAggregator.GetEvent<AccountIDEvent>()
            .Subscribe((item) => { Acc = item; });
         }
        private Account _acc;
        public Account Acc
        {
            get { return _acc; }
            set { SetProperty(ref _acc, value); }
        }

// VM 3
        public VM3(IEventAggregator _ea)
        { 
            ea = _ea;
            _token = eventAggregator.GetEvent<AccountIDEvent>()
            .Subscribe((item) => { Acc = item; });
         }
        private Account _acc;
        public Account Acc
        {
            get { return _acc; }
            set { SetProperty(ref _acc, value); }
        }

Was ich nun nicht so ganz nachvollziehen kann ist, weshalb meine VM3 ein NullReferenceException auswirft, meine VM2 aber nicht ?
Ebenso übernimmt mein Acc im VM2 den Wert, mein Acc im VM3 jedoch nicht.
Ich dachte erst, da mein V2(VM2) aus der V1 geladen wird durch den regionManager, dass der Wert eventuell überladen wird o.d.,
ich hatte versucht, den Event mal zu unsubscrippen, in der Hoffnung, jedoch veränderte sich da nichts. Ob ich im VM2 nun auf das Event zugreife oder nicht, das problem, dass es zum einen im Vm3 (wo es tatsächlich gebraucht wird) nicht übernommen wird als auch eine NullReferenceException auswirft ist für mich irgendwie grad etwas fraglich.

--

Ich weiß, dass die Fehlermeldung kommt, da Acc nie etwas zugewiesen bekommt, jedoch tut es im VM2 auch nicht und dort erscheint die Meldung nicht.
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

wann wird denn VM3 erstellt?
Das riecht danach, dass das erst nach dem Aufruf von Publish passiert. Dann bekommst Du das Event nicht mehr mit, weil Du zu spät subscribst.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
behindyoû
myCSharp.de - Member



Dabei seit:
Beiträge: 20

Themenstarter:

beantworten | zitieren | melden

Gegrüßt seist auch du, MarsStein.

Der Aufbau geht wie folgt.


"SignView(V1(VM1))" Beim Login wird der Acc pupslisht.

eventAggregator.GetEvent<AccountIDEvent>().Publish(Acc);

MainView (V2(VM2)) Beim Laden der View wird dem ContentControl die Ansicht der TasksView angezeigt. Sprich

MainView
=> TaskView (V3(VM3))
=> SomeOtherView (V4(Vm4))
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding LoadMainCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

        
        private void ExecuteLoadCommand()
        {
            //MessageBox.Show(Acc.AccountOwner); | Nur zur Testwecke des Events.
            regionManager.RequestNavigate("MainRegion", "Tasks");

        }
private Nachricht | Beiträge des Benutzers