C# 级联IPropertyChanged
我有一个组织如下的数据结构: 一个C# 级联IPropertyChanged,c#,C#,我有一个组织如下的数据结构: 一个列表,包含一个列表,其中包含一个列表 我希望能够在别名/符号/图形中发生任何更改时,在Graphic类中运行函数。我能看到的实现这一点的最佳方法是在三个类中的每一个类上实现IPropertyChanged。但是,是否可以在引用图形的同时级联这些内容,以了解具体更改的内容 注意:更改通常是对别名中的属性进行的,但是可以删除/添加或重命名符号也是合理的。您可以利用实现INotifyCollectionChanged和INotifyPropertyChanged的类O
列表
,包含一个列表
,其中包含一个列表
我希望能够在别名/符号/图形中发生任何更改时,在Graphic
类中运行函数。我能看到的实现这一点的最佳方法是在三个类中的每一个类上实现IPropertyChanged
。但是,是否可以在引用图形的同时级联这些内容,以了解具体更改的内容
注意:更改通常是对别名中的属性进行的,但是可以删除/添加或重命名符号也是合理的。您可以利用实现INotifyCollectionChanged
和INotifyPropertyChanged
的类ObservableCollection
基本上,您需要创建一个派生类并重写一些方法
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);
}
}
公共类数据
{
公共ObservableCollection InnerCollection{get;set;}
}
公共类集合:ObservableCollection
{
受保护的覆盖无效插入项(整数索引,数据项)
{
item.InnerCollection.CollectionChanged+=InnerCollection\u CollectionChanged;
基本插入项(索引,项目);
}
私有void InnerCollection\u CollectionChanged(对象发送方,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
//事实上,这没有任何意义。你可能需要构造一些特殊的东西。但是触发一个事件就足够了
非集合更改(e);
}
受保护的覆盖void removietem(int索引)
{
var日期=基本项目[索引];
date.InnerCollection.CollectionChanged-=InnerCollection\u CollectionChanged;
基本删除项(索引);
}
}
使用类似的工具,您可以将活动安排得尽可能深入。干杯!这正是我所需要的。您还可以将BindingList用于实现此功能的内置集合。