Как сообщить родительскому классу об изменении в его дочерних элементах?

Это пример кода:

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));
    }
}

Допустим, у меня теперь есть два экземпляра моих классов, один как myParent, а другой как myChild. У меня есть два визуальных элемента, каждый из которых имеет свойство, привязанное к свойству IsChnaged моих экземпляров; ElementA привязан к myParent.IsChanged, а ElementB привязан к myChild.IsChanged.

Когда myChild.Value отличается от своего значения по умолчанию, myChild.IsChanged устанавливается в значение true, и ElementB обновляется соответствующим образом.

Мне нужно, когда для любого из дочерних элементов myParent (а здесь только один) для их значения IsChanged установлено значение true, для его собственного (родительского) значения IsChanged должно быть установлено значение true и соответствующее ему element (здесь ElementA)будут обновлены соответствующим образом.

myParent.IsChanged читается только один раз (когда установлена ​​привязка), и он не имеет никакого смысла в изменении своих дочерних элементов. Куда мне поместить RaiseChanged ("IsChanged") для MyParent? Как я могу сообщить родителю, что его дети изменились?

Заранее спасибо

8
задан zx81 2 August 2014 в 21:12
поделиться