儿童之间的映射'在同一类列表

本文关键字:列表 一类 之间 映射 | 更新日期: 2023-09-27 18:12:44

这个问题看起来很简单,但我真的不能得到这个技巧,同时我不想通过一个工作。我有这个XML文件

<Master>
  <Parent1>
     <child1/>
     <child1/>
     <child1/>
  </Parent1>
  <Parent2>
     <child2/>
     <child2/>
     <child2/>
  </Parent2>
</Master>

我在当前的类结构中反序列化它

Class Master
{
  List<child1> Parent1;
  List<child2> Parent2;
}

Child2在UI上显示,当它发生变化时,应将child1更改为与Child2具有相同ID。问题是,在child2中,我无法访问Parent1,所以如何返回到child1中进行更改。我需要一个好的解决方案,而不是权宜之计。

Edit: Child1和Child2是两个不同的类,但它们的属性之间存在一定的映射关系。

儿童之间的映射'在同一类列表

您可以让每个父级都知道哪些子级被添加/删除了。每个父级都将获得该事件,如果它是匹配的子级(或由于其他逻辑而相关),则将处理该事件。

两个公共对象,用于父对象和主对象之间的通信:

public enum ChangeType { Added, Removed }
public delegate void ChildChangeEvent(Parent parent, Child child, ChangeType changeType);

父类有两个主要角色——当它有添加/删除的子类时引发事件,当它被其他父类引发并且与它们相关时处理该事件。

class Parent
{
    public event ChildChangeEvent ChildChangeEvent;
    private List<Child> _children;
    public void Add(Child child)
    {
        _children.Add(child);
        ChildChangeEvent(this, child, ChangeType.Added);
    }
    public void Remove(Child child)
    {
        _children.Remove(child);
        ChildChangeEvent(this, child, ChangeType.Removed);
    }
    public void NotifyChange(Parent parent, Child child, ChangeType changeType)
    {
        //do where you want with this info.. change local id or whatever logic you need
    }
}

Master班应该通知所有家长孩子的添加/删除由父级之一引发的事件:

class Master
{
    private List<Parent> _parents;
    public void AddParent(Parent parent)
    {
        _parents.Add(parent);
        parent.ChildChangeEvent += parent_ChildChangeEvent;
    }
    void parent_ChildChangeEvent(Parent parent, Child child, ChangeType changeType)
    {
        foreach (var notifyParent in _parents)
        {
            notifyParent.NotifyChange(parent, child, changeType);
        }
    }
}