级联IPropertyChanged

时间:2017-01-18 15:08:11

标签: c#

我有一个如此组织的数据结构:

包含List<Graphic>的{​​{1}},其中包含List<Symbol>

我希望能够在别名/符号/图形内发生任何变化时在List<Alias>类中运行一个函数。我可以看到这样做的最好方法是在三个类中的每一个上实现Graphic。但是,是否有可能将这些级联起来,同时获得对IPropertyChanged的引用,以确定究竟发生了什么变化?

注意:更改通常是Graphic内的属性,但同样可以删除/添加或重命名Alias

1 个答案:

答案 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);
        }
    }

使用类似的东西,您可以根据需要将事件嵌套。