ViewModel Properties ohne Setter von anderem ViewModel aus updaten/refreshen

  • WPF

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    ViewModel Properties ohne Setter von anderem ViewModel aus updaten/refreshen

    Hi,
    ich hab gerade ein Denkblockade.
    Wie Binding grundsätzlich funktioniert, weis ich und klappt auch immer bei mir, aber...
    Ich habe nun ein ViewModel (MainViewModel) welches unter anderem einen Button besitzt, um einen Zeiteintrag in der DB zu erstellen.
    In einem anderen ViewModel (werden auf der Mainpage beide angezeigt) sind 2 Setterlose Properties, die lediglich aus der DB den Saldo holen und anzeigen.

    Jetzt versuche ich, wenn der Command im MainViewModel ausgeführt wird, die beiden Properties aus dem anderen ViewModel zu aktualisieren.
    Und da hänge ich gerade.

    zum beseren Verständnis:
    Der eingekreiste Button löst einen Command im MainViewModel aus:

    C#-Quellcode

    1. private void CheckOut()
    2. {
    3. TimeEntriesLogic.CreateTimeEntry(IoC.Application.CurrentPerson.Id, StampTypeEnum.CheckOut);
    4. OnPropertyChanged(nameof(IsPresent));
    5. }


    die beiden Pfeile zeigen auf die beiden Salden im OwnDataViewModel welches im MainViewModel deklariert wird und in der MainPage auch gebunden ist:

    C#-Quellcode

    1. private OwnDataViewModel _ownData;
    2. public OwnDataViewModel OwnData { get => _ownData; set => SetValue(ref _ownData, value); }
    3. public bool IsPresent => TimeEntriesLogic.IsPresent(IoC.Application.CurrentPerson.Id);


    die beiden Properties aus dem OwnDataViewModel:

    C#-Quellcode

    1. #region Saldo Properties
    2. public TimeSpan ActualSaldo => TimeEntriesLogic.GetYearlySaldo(IoC.Application.CurrentPerson.Id, DateTime.Now.Year);
    3. public TimeSpan MonthlySaldo => TimeEntriesLogic.GetMonthlySaldo(IoC.Application.CurrentPerson.Id, DateTime.Now.Month);
    4. public TimeSpan LastYearSaldo => TimeEntriesLogic.GetYearlySaldo(IoC.Application.CurrentPerson.Id, DateTime.Now.Year - 1);
    5. #endregion


    Naiv wie ich bin hab ich im CheckOutCommand versucht, OnPropertyChanged(nameof(OwnData.ActualSalso)) aufzurufen.
    Das klappt leider nüscht.

    Gibt es einen Weg das zu realisieren?

    Danke Euch
    "Hier könnte Ihre Werbung stehen..."
    Es ist simpler als man denkt.

    Mach dir eine Internal Viod RaiseSaldoPRopertyChanged in deinem ViewModel in welchem die ReadOnly Properties sind. Und diese rufst du dann einfach auf.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Au mann, ich sag ja, Wald Bäume....

    Ich hatte schon mit einem Event experimentiert, aber wohl falsch verwendet.
    Dann hatte ich eine ReloadData die ich Public gemacht hatte, aber diese Möglichkeit garnicht dran gedacht.
    Sieht jetzt so aus (OwnDataViewModel):

    C#-Quellcode

    1. internal void OnSaldoPropertyChanged()
    2. {
    3. OnPropertyChanged(nameof(ActualSaldo));
    4. OnPropertyChanged(nameof(MonthlySaldo));
    5. }


    und im Command dann:

    C#-Quellcode

    1. private void CheckOut()
    2. {
    3. TimeEntriesLogic.CreateTimeEntry(IoC.Application.CurrentPerson.Id, StampTypeEnum.CheckOut);
    4. OnPropertyChanged(nameof(IsPresent));
    5. OwnData.OnSaldoPropertyChanged();
    6. }


    klappt hervorragend, Danke Dir.... jetzt bin ich fast fertig *freu*
    "Hier könnte Ihre Werbung stehen..."