Laden...

Zwei Aufrufe der gleichen Property nur ein NullReferenzException

Erstellt von behindyoû vor 3 Jahren Letzter Beitrag vor 3 Jahren 741 Views
B
behindyoû Themenstarter:in
20 Beiträge seit 2020
vor 3 Jahren
Zwei Aufrufe der gleichen Property nur ein NullReferenzException

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.

3.170 Beiträge seit 2006
vor 3 Jahren

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

B
behindyoû Themenstarter:in
20 Beiträge seit 2020
vor 3 Jahren

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");

        }