Events zusammenfassen die auf der gleichen Aktion basieren



  • Hallo,

    ich habe eine knifflige Frage für euch.
    In meinem Projekt gibt es Business-Objekte die INotifyPropertyChanged implementieren. Bei einer Änderung der Properties wird das PropertyChanged-Event gefeuert.

    Zu diesen Business-Objekten gibt es jetzt mehrere UI-Objekte, die für die Darstellung zuständig sind, so gibt es beispielsweise ein UI-Objekt für eine Kurz-Darstellung und eine für eine Lang-Darstellung.
    Die UI-Objekte registrieren sich auf die Events der Business-Objekte.
    Wenn sich das Business-Objekt ändert, dann prüfen die UI-Objekte, ob sich ihre Darstellung geändert hat.
    Wenn sich die Darstellung ändert, dann feuern die UI-Objekte auch entsprechende Events.
    Beide UI-Elemente sind in einem Container. Dieser hängt sich wiederum an die Events der UI-Objekte.

    Folgendes Problem:
    Wir haben ein Business-Objekt B1. Dafür gibt es zwei UI-Objekte, eines für die Lang-Darstellung Ul und eines für die Kurz-Darstellung Uk. Beide sind im gleichen Container C1.
    Angenommen bei B1 wird der Name geändert, dann feuern sowohl Ul als auch Uk ihr Event, da sich bei einer Namensänderung sowohl die Lang- als auch die Kurzdarstellung ändert.
    C1 bekommt also zwei Events und feuert daher aktuell sein Event auch zweimal.

    Wie kann ich das sinnvoll verhindern, so dass C1 sein Event nur einmal feuert, wenn die Events die er bekommt auf der gleichen Aktion basieren, nämlich der Änderung des Namens in B1?

    Eine Möglichkeit wäre ein Konzept analog InnerExceptions, d.h. wenn Ul und Uk ihr Event feuern, die EventArgs vom Event von B1 mit inkludieren.
    Das bedeutet aber zum Einen, dass ich meine EventArg-Klassen entsprechend erweitern muss und schlimmer, dass ich damit die Kapselung teilweise durchbrech.

    Irgendwelche Ideen?



  • Was ist das für ein Container? Und warum muss er sich an die Events der UI-Events anhängen?Das ist mir aus dem TExt noch nicht so klar gewurden.Eventuell können wir dann besser helfen.



  • Weil er selbst auch wieder ein UI-Objekt ist das andere benachrichtigt, wenn er sich geändert hat. Und wenn sich eines seiner Kinder ändert, dann ändert er sich ja auch.



  • Aber implementiert diese Logik nicht der ObservableCollection<T> automatisch für dich?Soweit ich weiß informiert auch alle, welche mit dieser Collection interagieren.



  • ObservableCollection informiert, wenn sich der Inhalt der Collection ändert. Nicht der Inhalt eines Objektes in der Collection



  • Scheiße hast Recht, hab ich voll vergessen, aber ich verusch mal weiter ob mir da was einfällt.
    Was mir eventuell noch einfallen würde, und sowas ähnliches hab ich auch schonmal im .net Framework gesehen, ist mit solchen Handled Flags an den Eventargs zu arbeiten. Nur mir will grad nich einfallen wie man das am geschicktesten mit deinem Problem realisieren könnte. 😕



  • Warum ist die Ereigniskette B->U->C und nicht B->C->U?



  • Weil C nicht für die Darstellung von B zuständig ist. U ist es aber.



  • Dennoch ist eine Abhängigkeit vorhanden wenn du die Ereignisse von U nach C weiterroutest. Deshalb könnte evtl. das Design überdacht werden.
    Eine andere Methode ist das Zwischenschieben eines Mediators/Observers o.ä. der Events gruppiert oder bei doppelten das letzte unterdrückt.


Log in to reply