这个问题看起来很简单,但我真的无法解决这个问题,同时我不想通过解决方法。我有这个 XML 文件
<Master>
<Parent1>
<child1/>
<child1/>
<child1/>
</Parent1>
<Parent2>
<child2/>
<child2/>
<child2/>
</Parent2>
</Master>
我在当前类结构中反序列化它
Class Master
{
List<child1> Parent1;
List<child2> Parent2;
}
只要 Child2 发生变化,它就会显示在 UI 上,因为 child1 的 ID 与 child2 相同。问题是在 child2 中,我无法访问 Parent1,所以如何才能返回到 child1 中进行更改。我需要一个好的解决方案,而不是解决方法。
编辑: Child1 和 Child2 是两个不同的类,但它们的属性之间存在一定的映射关系。
最佳答案
您可以让每位家长知道添加/删除了哪些 child 。 每个 parent 都会收到事件,如果它是匹配的 child (或由于其他逻辑而相关),将处理它。
两个用于parent和master之间通信的公共(public)对象:
public enum ChangeType { Added, Removed }
public delegate void ChildChangeEvent(Parent parent, Child child, ChangeType changeType);
父类有两个主要角色——如果它有一个添加/删除的 child 则引发一个事件,如果其他 parent 提出并与他们相关则处理这个事件。
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
类应该通知所有家长关于添加/删除的 child
其中一位家长提出的事件:
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);
}
}
}
关于c# - 同一类(class) child 列表之间的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553594/