Laden...

Eigenschaftsänderungsüberwachung mit Arrays

Erstellt von Servus vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.103 Views
S
Servus Themenstarter:in
79 Beiträge seit 2009
vor 14 Jahren
Eigenschaftsänderungsüberwachung mit Arrays

Hi,

ich habe in einer Klasse eine Eigenschaft, dessen Typ aus einer Klasse mit jeweils auch Eigenschaften, und einem Array besteht, dessen Typ wiederum einer Klasse mit Eigenschaften ist.

Wenn ich nun die Eigenschaft aus der Klasse vom Typ dess Arays ändere, funktioniert meine Ereignisüberwachung nicht(s.Unten).

Also: KLasse1-Eigenschaft->Klasse2-Eigenschaftsarray->Klasse3-Eigenschaft

Meine erste Frage: Wenn ich diese Eigenschaft nun ändere, wird dann nicht der set-Teil der ersten Eigenschaft aufgerufen??

Nun meine jetzige Ereignisüberwachung:



Klasse1 : INotifyPropertyChanged
{
        Eigenschaft Typ Name
        {
                get
                {
                         ...
                }
                set
                {
                          ...

                          NotifyPropertyChanged("");
                 }
         }

        #region INotifyPropertyChanged Member

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
}


Wie kann ich, dass wenn irgendeines dieser unterereignisse geändert wird, dieses Ereignis auslösen??? 🤔

while (!sleep) sheep++;

S
167 Beiträge seit 2008
vor 14 Jahren

In dem die jeweilse "obere" Klasse (also Klasse1 in deinem Bsp) das Event der Klasse(n)2 aboniert.

5.299 Beiträge seit 2008
vor 14 Jahren

So richtig sauber wird das aber glaub nicht.
Wenn Klasse 3 eine Eigenschaft ändert, darf Klasse1 doch gar keine Änderung melden -
Jedenfalls nicht über INotifyPropertyChanged.
weil bei ihr ist ja keine Eigenschaft geändert worden.

Vlt. müsste man da, wo Klasse1-Änderungen verarbeitet werden, auch alle enthaltenen Klasse3-Dinger durchgehen, und deren Änderungen registrieren/deregistrieren.

Der frühe Apfel fängt den Wurm.

S
Servus Themenstarter:in
79 Beiträge seit 2009
vor 14 Jahren

Habe es schon hingekriegt. Trotzdem danke für die Hilfe.

while (!sleep) sheep++;

99 Beiträge seit 2006
vor 14 Jahren

servus Servus 😉

und wie hast du es gelöst?

ansonsten hat Sebi Recht.

eine Anmerkung am Rande:
anstatt Array von INotifyPropertyChanged solltest du nutzen
System.Collections.ObjectModel.Collection<INotifyPropertyChanged>

diese Collection hat virtuelle Methoden um das Addieren, Modifizieren und Entfernen von Elementen zu verfeinen. Hier kannst du die PropertyChanged Ereignisse für ihre elemente abonnieren/freigeben.

S
Servus Themenstarter:in
79 Beiträge seit 2009
vor 14 Jahren

wie sebi es geschrieben hat 😁

while (!sleep) sheep++;