让孩子控制更新父母的最新方法是什么。
我在父对象中托管了许多子控件,我可以想到两种向其发送更改信息的方法。
1)将子控件连接到父级中的事件,并在父级的更改中触发该事件
2)在数组中保留子项列表,并在发生更改时遍历数组,并在子项中调用方法来处理新更改。
我希望我把它描述好。
两者都有效,但可能有正确的方法来处理这个错误的方法。
编辑: 下面是我的代码...用于事件方法。我对如何将孩子与父母联系起来感到不满意;任何sugestions。
父母......
public class A_Parent
{
public delegate void DelUpdateMessage( string msg );
public event DelUpdateMessage UpdateMessage;
public A_Parent()
{
a_Child1.prnt = this;
a_Child2.prnt = this;
a_Child3.prnt = this;
a_Child4.prnt = this;
}
private void FireUpdateMessageEvent( string message)
{
var handlers = UpdateMessage;
if (handlers != null)
handlers( message );
}
}
孩子......
public class A_Child
{
A_Parent pnt;
public A_Parent prnt
{
set
{
pnt = value;
pnt.UpdateMessage += new A_Parent.DelUpdateMessage(pnt_UpdateMessage);
}
}
void pnt_UpdateMessage(string msg) { }
}
答案 0 :(得分:5)
您的#1解决方案是最好的选择,因为它允许您在不更改父级的情况下更改您的实现。由于父母可能不关心它是否有孩子,因此基于事件的方法是理想的。
<强>更新强>
反向事件方法是不诚实的。人们说父母清楚地知道孩子们对他们感兴趣,我只是倾向于不同意这种说法。我的设计通常会让孩子们对父母产生动态的兴趣,订阅这些事件的孩子通常是最有利的方式。
您可以在.NET模型中找到这样的示例,例如包含可以绑定的事件的页面。
答案 1 :(得分:2)
事件不是这里的正确选择。父母从来没有问题确定需要通知哪些儿童控制。只需向UC添加公共方法,如UpdateMessage()。家长可以直接打电话给他们。
保留事件,以便在您不知道哪些侦听器可能感兴趣时能够通知侦听器。像你正在考虑的“反向事件”是不健康的,它在表格上有参考。永远不应该引用表单,以便在关闭时可以收集垃圾。这不是一个真正的问题,因为引用由子控件保存,但原则成立。
答案 2 :(得分:0)
事件机制是此类任务的常见例程。它比第二种解决方案更灵活。