Laden...

INotifyPropertyChanged "Eine Ebene tiefer"

Erstellt von Kriz vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.535 Views
K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 6 Jahren
INotifyPropertyChanged "Eine Ebene tiefer"

Hallo zusammen,

folgende Situiation:

ich habe eine Klasse Vertrag:

class Vertrag
    {
        private int mID;
        private string mName;

        public int ID
        {
            get { return mID; }
            set { mID = value; }
        }
        public string Name
        {
            get { return mName; }
            set { mName = value; }
        }
    }

diese habe ich als Property-ObservableCollection in einem VieModel:

private ObservableCollection<Vertrag> mVertragsListe;
        public event PropertyChangedEventHandler PropertyChanged;

        public ObservableCollection<Vertrag> VertragsListe
        {
            get { return mVertragsListe; }
            set { mVertragsListe = value;
                OnPropertyChanged("VertragsListe");
            }
        }

        protected internal void OnPropertyChanged(string propertyname)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
        }

Das Problem: Wenn sich etwas an der ObservableCollection ändert, wird , wie erwartet, OnPropertyChanged ausgelöst und die View aktualisiert. Wenn sich allerdings etwas an einem Vertrag ändert, wie beispielsweise die ID oder der Name, dann wird OnPropertyChanged nicht ausgelöst.
Wie gehe ich es an, dass meine View auch dann aktualisiert wird?

VielenDank!
Kriz

M
177 Beiträge seit 2009
vor 6 Jahren

Du musst in der Property im Setter auch die Methode OnPropertyChanged(propertyname) aufrufen (In der Klasse Vertrag).

K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 6 Jahren

Also muss dann die Klasse Vertrag auch von INotifyPropertychanged erben und die Benachrichtigung wird dann quasi weiter "nach oben" geleitet?

M
177 Beiträge seit 2009
vor 6 Jahren

Also muss dann die Klasse Vertrag auch von INotifyPropertychanged [...] implementieren. Ja.

1.040 Beiträge seit 2007
vor 6 Jahren

Noch als kleiner Nachtrag:

Wenn sich etwas an der ObservableCollection ändert, wird , wie erwartet, OnPropertyChanged ausgelöst...

In dem Fall wird die View in der Regel aber über die Mechanismen der ObservableCollection aktualisiert, die ObservableCollection implementiert nämlich auch INotifyPropertyChanged und zusätzlich INotifyCollectionChanged.

Dein OnPropertyChanged wird für die Property VertragsListe nur dann ausgelöst, wenn die komplette Liste neu gesetzt wird, was i.d.R. nicht notwendig ist, weil man eben meistens mit ein und derselben Liste arbeitet.

Schaue dir über den [Artikel] Debugger: Wie verwende ich den von Visual Studio? mal an, ob er in die Zeile

OnPropertyChanged("VertragsListe");

läuft...