Autor Beitrag
ebber
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Fr 19.10.12 18:07 
Hallo,

ich habe eine Liste:
ausblenden C#-Quelltext
1:
public static ObservableCollection<Tme> ls = new ObservableCollection<Tme>()					


dazu habe ich die Klasse:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 19.10.12 18:23 
Simpelantwort: Einfach auf die Elemente der Liste zugreifen:
ausblenden C#-Quelltext
1:
ls[0].PropertyChanged += ...					


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

ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Fr 19.10.12 21:03 
Danke, das letztere war genau das was ich gesucht hatte.