Entwickler-Ecke

C# - Die Sprache - PropertyChanged Event von INotifyPropertyChanged mitbekommen


ebber - Fr 19.10.12 18:07
Titel: PropertyChanged Event von INotifyPropertyChanged mitbekommen
Hallo,

ich habe eine Liste:

C#-Quelltext
1:
public static ObservableCollection<Tme> ls = new ObservableCollection<Tme>()                    


dazu habe ich die Klasse:

C#-Quelltext
1:
2:
3:
public class Tme: INotifyPropertyChanged
{
...


Das INotifyPropertyChanged hat ein Event: "PropertyChanged".

Nu ist das Problem, ich möchte gerne mitbekommen wenn dieses Event ausgelöst wird. Aber wie komme ich von meiner Liste ls irgendwohin wo ich dahinterschreiben kann += ... ? Also ls......PropertyChanged += ... ? Geht das überhaupt?

MfG


Christian S. - Fr 19.10.12 18:23

Simpelantwort: Einfach auf die Elemente der Liste zugreifen:

C#-Quelltext
1:
ls[0].PropertyChanged += ...                    


Oder, wenn strikt nur Elemente, die in der Liste sind, "beobachtet" werden sollen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
        static void Main(string[] args)
        {
            var ls = new ObservableCollection<Foo>();
            ls.CollectionChanged += ls_CollectionChanged;

            Console.ReadLine();
        }

        static void ls_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.Replace)
                foreach(Foo element in e.NewItems)
                    element.PropertyChanged += elementChanged;

            if (e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Reset
                || e.Action == NotifyCollectionChangedAction.Replace)
                foreach (Foo element in e.OldItems)
                    element.PropertyChanged -= elementChanged;            
        }

Auf die weise wird auf die Änderungen "gehorcht", sobald ein Element der Liste hinzugefügt wird und das nicht mehr, sobald es daraus entfernt wird.

Grüße,
Christian


ebber - Fr 19.10.12 21:03

Danke, das letztere war genau das was ich gesucht hatte.