Comment permettre à un parent de la classe de connaître un changement de ses enfants?

Ceci est un exemple de code:

public class MyParent : INotifyPropertyChanged
{
List<MyChild> MyChildren;
public bool IsChanged
{
get
{
foreach (var child in MyChildren)
{
if (child.IsChanged) return true;
}
return false;
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaiseChanged(string propName)
{
if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propName));
}
}
public class MyChild : INotifyPropertyChanged
{
private int _Value;
public int Value
{
get
{
return _Value;
}
set
{
if (_Value == value)
return;
_Value = value;
RaiseChanged("Value");
RaiseChanged("IsChanged");
}
}
private int _DefaultValue;
public int DefaultValue
{
get
{
return _DefaultValue;
}
set
{
if (_DefaultValue == value)
return;
_DefaultValue = value;
RaiseChanged("DefaultValue");
RaiseChanged("IsChanged");
}
}
public bool IsChanged
{
get
{
return (Value != DefaultValue);
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaiseChanged(string propName)
{
if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propName));
}
}

Disons que j'ai maintenant deux instances de mes classes, l'une comme myParent, et l'autre comme myChild.
J'ai deux éléments visuels, qui ont chacune une propriété liée à la IsChnaged propriété de mes instances; ElementA lié à myParent.IsChanged et ElementB lié à myChild.IsChanged.

Quand myChild.Valeur diffère de sa valeur par défaut, la myChild.IsChanged est définie sur true et le ElementB est mis à jour en conséquence.

Ce dont j'ai besoin, c'est quand l'une des myParent des enfants (ce qui n'est ici qu'un) ont leur IsChanged valeur est définie sur true, son propre (le parent) IsChanged valeur true et sa correspondante
élément (ElementA ici) être mis à jour en conséquence.

La myParent.IsChanged n'est lu qu'une seule fois (lorsque la liaison est définie) et il n'a pas de sens au sujet de ses enfants en train de changer. Où dois-je mettre de la RaiseChanged("IsChanged") pour MyParent? Comment puis-je informer le parent de savoir quand ses enfants ont changé?

Merci d'avance

Vous pourriez faire de votre enfant au constructeur de prendre en paramètre l'objet parent, et lors de la création de ces objets enfants que vous pourriez donner le parent de l'objet dans le constructeur.
C'est quelque chose que je tiens à éviter, je préfère ne pas introduire de la mère à l'enfant, soit dans le constructeur ou même comme une propriété. Est-il un autre chemin?

OriginalL'auteur iXed | 2011-07-11