Wie lassen Sie eine übergeordnete Klasse wissen über eine änderung der Kinder?

Dies ist ein Beispiel-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));
    }
}

Sagen wir mal ich habe jetzt zwei Instanzen meiner Klassen, einem als myParent, und die andere als myChild.
Ich habe zwei visuellen Elementen, die jeweils eine Eigenschaft, die gebunden an die IsChnaged Eigentum meines Instanzen; ElementA gebunden myParent.IsChanged und ElementB gebunden myChild.IsChanged.

Wenn myChild.Wert unterscheidet sich von seinem Standardwert, der myChild.IsChanged auf true gesetzt ist und die ElementB wird entsprechend aktualisiert.

Was ich brauche, ist, wenn entweder der myParent Kinder (die hier ist nur einer) haben Ihre IsChanged Wert auf true gesetzt, seine eigene (die Eltern) IsChanged Wert auf true gesetzt werden und der entsprechende
element (ElementA hier) werden entsprechend aktualisiert.

Den myParent.IsChanged nur einmal gelesen werden (wenn die Bindung eingestellt ist) und es hat keinen Sinn über seine Kinder ändern. Wo sollte ich die RaiseChanged("IsChanged") für MyParent? Wie kann ich lassen Sie die Eltern wissen, wenn Ihre Kinder sich verändert haben?

Vielen Dank im Voraus

  • Sie konnte Ihr Kind Konstruktor nehmen als parameter das Eltern-Objekt, und während der Erstellung diese untergeordneten Objekte Sie können die parent-Objekt im Konstruktor.
  • Das ist etwas, was ich gerne vermeiden, würde ich mir eher nicht vorstellen, dass ein Elternteil das Kind, entweder im Konstruktor oder sogar als Eigentum. Gibt es irgendeine andere Weise herum?
InformationsquelleAutor iXed | 2011-07-11
Schreibe einen Kommentar