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
Du musst in der Property im Setter auch die Methode OnPropertyChanged(propertyname) aufrufen (In der Klasse Vertrag).
Also muss dann die Klasse Vertrag auch von INotifyPropertychanged erben und die Benachrichtigung wird dann quasi weiter "nach oben" geleitet?
Also muss dann die Klasse Vertrag auch von INotifyPropertychanged [...] implementieren. Ja.
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...