我有以下类结构
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事件。
有没有人有建议,没有为每个内部对象设置事件处理程序?
答案 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,并在内部属性更改时触发顶级属性更改事件。