繁体   English   中英

如何通知子控件父级更改

[英]how do I notify child controls of a change in the parent

什么是让孩子控制更新父母更新的最佳方法。

我在父对象中托管了许多子控件,我可以想到两种方法来向它们发送更改信息。

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

}

您的#1解决方案是最好的选择,因为它允许您在不更改父级的情况下更改您的实现。 由于父母可能不关心它是否有孩子,因此基于事件的方法是理想的。

UPDATE

反向事件方法是不诚实的。 人们说父母清楚地知道孩子们对他们感兴趣,我只是倾向于不同意这种说法。 我的设计通常会让孩子们对父母产生动态的兴趣,订阅这些事件的孩子通常是最有利的方式。

您可以在.NET模型中找到这样的示例,例如包含可以绑定的事件的Page。

事件不是这里的正确选择。 父母从来没有问题确定需要通知哪些儿童控制。 只需向UC添加公共方法,如UpdateMessage()。 父母可以直接打电话给他们。

保留事件,以便在您不知道哪些听众可能感兴趣时能够通知听众。 像你正在考虑的“反向事件”是不健康的,它在表格上有参考。 永远不应该引用表单,以便在关闭时可以收集垃圾。 这不是一个真正的问题,因为引用由子控件持有,但原则成立。

事件机制是此类任务的常见例程。 它将比您的第二个解决方案灵活得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM