这个问题看起来很简单,但是我真的不想解决这个问题,我确实有这个XML文件
<Master>
<Parent1>
<child1/>
<child1/>
<child1/>
</Parent1>
<Parent2>
<child2/>
<child2/>
<child2/>
</Parent2>
</Master>
我在当前的类结构中反序列化
Class Master
{
List<child1> Parent1;
List<child2> Parent2;
}
每当在child2上进行更改时,child2都会显示在UI上,更改后的child1的ID与child2相同。问题是在child2中,我无法访问Parent1,因此如何向后更改child1。我需要一个好的解决方案,而不是解决方法。
编辑: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);
}
}
}