同一类童子名单之间的映射

时间:2015-09-13 19:17:47

标签: c# oop

这个问题看起来很容易,但我真的不能在同一时间我不想解决这个问题。我有这个XML文件

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

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

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

每当更改时,子项2都会显示在UI上。更改child1与child2具有相同的ID。问题是在child2中我无法访问Parent1所以如何在child1中进行更改。我需要一个好的解决方案而不是解决方法。

编辑: Child1和Child2有两个不同的类,但它们的属性之间存在某些映射。

1 个答案:

答案 0 :(得分:0)

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

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

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

}