2010-04-21 66 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