2010-04-21 76 views
4

如何让孩子掌握更新父母变更的最佳方法是什么?如何通知孩子控制父母变更

我有一些子控件托管在我的父对象中,我可以想到两种方式向他们发送更改信息。

1)线的子控件在父的事件,并触发对父

2)改变该事件让孩子列表中的数组,并通过数组迭代时变化发生并在子中调用一个方法来处理新的更改。

我希望我描述一下。

两者都有效,但可能有正确的方法来处理这种错误的方法。

编辑: 下面是我的代码...为事件方法。我不满意我是如何将孩子连接到父母的;任何诉求。

家长...

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

} 

回答

5

你的#1的解决方案是最好的选择,因为它可以让你在你执行更改,恕不的变化父母。由于父母可以不在乎是否有孩子,基于事件的方法是理想的。

UPDATE

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

你可以在.NET模型中找到这样的例子,比如你可以绑定事件的页面。

0

事件机制是这些任务的常见例程。它会比第二种解决方案更灵活。

2

事件不是这里的正确选择。父母在确定需要通知哪些子控件时从未遇到任何问题。简单地向UC添加公共方法,如UpdateMessage()。家长可以直接打电话给他们。

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

+0

谢谢你,我...赞赏“反向事件”评论 – fishhead 2010-04-21 18:45:48

+0

我同意。由于父母知道孩子有什么,所以应该只对这些孩子调用公共方法。 – 2010-04-21 18:54:57