【问题标题】:PropertyChanged for nested class structure嵌套类结构的 PropertyChanged
【发布时间】:2012-03-26 15:32:16
【问题描述】:

我有以下类结构

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 事件。

除了为每个 Inner 对象设置事件处理程序之外,是否有人有建议?

【问题讨论】:

  • 这正是您需要做的。在每个 Inner 上订阅 PropertyChanged 并做出相应的反应。
  • 同意。也使用 IsInnerTrue { get{ return innerList.All(IsTrue); }
  • 谢谢。我希望有一种不那么复杂的方法。

标签: wpf data-binding inotifypropertychanged


【解决方案1】:

这里有两个选项。一、订阅内部的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,并在内部属性更改时触发顶级属性更改事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2016-07-19
    • 2019-08-11
    相关资源
    最近更新 更多