PropertyChanged用于嵌套类结构

时间:2012-03-26 15:32:16

标签: wpf data-binding inotifypropertychanged

我有以下类结构

class Top : NotifyPropertyChanged
{
   private List<Inner>  innerList;

   public bool IsInnerTrue
   {
      get
      {
          foreach (Inner inner in innerList)
          {
             if (inner.IsTrue)
                return true;
          }
          return false;
      };
   }
}

class Inner : NotifyPropetyChanged
{
   private bool isTrue;
   public bool IsTure
   {
      get
      {
         return isTrue;
      }
      set
      {
         isTrue = value;
         NotifyPropretyChanged("IsTrue");      
      }
   }
}

在我看来,我绑定了Top类的IsInnerTrue属性。我的问题是,当其中一个Inner对象的IsTrue属性更改值时,我无法弄清楚如何为IsInnerTrue触发PropertyChanged事件。

有没有人有建议,没有为每个内部对象设置事件处理程序?

1 个答案:

答案 0 :(得分:3)

以下是两个选项。一,订阅内部PropertyChanged事件:

class Top : NotifyPropertyChanged
{
    private List<Inner> innerList = new List<Inner>();

    public bool IsInnerTrue
    {
        get
        {
            foreach (Inner inner in innerList)
            {
                if (inner.IsTrue)
                    return true;
            }
            return false;
        }
    }

    public void Add(Inner inner)
    {
        innerList.Add(inner);
        inner.PropertyChanged += InnerPropertyChanged;
    }

    public void Remove(Inner inner)
    {
        innerList.Remove(inner);
        inner.PropertyChanged -= InnerPropertyChanged;
    }

    private void InnerPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "IsTrue")
            RaisePropertyChanged("IsInnerTrue");
    }
}

或者两个,使用像Update Controls这样的依赖关系跟踪库。这些库可以检测到IsInnerTrue依赖于IsTrue,并在内部属性更改时触发顶级属性更改事件。