我有一个如此组织的数据结构:
包含List<Graphic>
的{{1}},其中包含List<Symbol>
。
我希望能够在别名/符号/图形内发生任何变化时在List<Alias>
类中运行一个函数。我可以看到这样做的最好方法是在三个类中的每一个上实现Graphic
。但是,是否有可能将这些级联起来,同时获得对IPropertyChanged
的引用,以确定究竟发生了什么变化?
注意:更改通常是Graphic
内的属性,但同样可以删除/添加或重命名Alias
。
答案 0 :(得分:2)
您可以利用实施ObservableCollection<T>
和INotifyCollectionChanged
INotifyPropertyChanged
基本上,您需要创建派生类并覆盖一些方法
public class Data
{
public ObservableCollection<String> InnerCollection { get; set; }
}
public class collection : ObservableCollection<Data>
{
protected override void InsertItem(int index, Data item)
{
item.InnerCollection.CollectionChanged += InnerCollection_CollectionChanged;
base.InsertItem(index, item);
}
private void InnerCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
//Actually it does not make any sense. You may need to construct something special. But firing an event it would be enough
OnCollectionChanged(e);
}
protected override void RemoveItem(int index)
{
var date = base.Items[index];
date.InnerCollection.CollectionChanged -= InnerCollection_CollectionChanged;
base.RemoveItem(index);
}
}
使用类似的东西,您可以根据需要将事件嵌套。