2010-06-14 106 views

回答

0

在這一點上,您很可能會創建一個非常糟糕的設計。如果它需要訪問其父項,則可能不應該是UserControl。你確定你不能只添加一個事件處理程序到你的用戶控件,父頁面調用某些事件?

也就是說,您的UserControl將擁有您可以投出的.Page屬性來獲取您的父頁面。再次,這可能是一個非常糟糕的主意,你應該重新審視你的設計。

+0

好的。感謝您的建議 – Bendar 2010-06-14 21:25:18

1

也許最清潔的解決方案是,以提取包含必須從該用戶控件被調用的方法的接口,然後從頁傳遞的接口控制,例如:

public interface ISomeService 
{ 
    void Method1(); 
    bool Method2(); 
} 

public class MyContentPage : Page, ISomeService 
{ 
    void Method1() { ... } 
    bool Method2() { ... } 

    override OnLoad(...) 
    { 
    TheUserControl.SetService(this as ISomeService); 
    } 
} 

public class MyUserControl : UserControl 
{ 
    public void SetService(ISomeService service) 
    { 
    _service = service; 
    } 

    private void SomeOtherMethod() 
    { 
    _service.Method1(); 
    } 
} 

另一變型將很只需要包含用戶控件的頁面來實現所需的接口。這使得SetService()方法不需要:

public class MyUserControl : UserControl 
{ 
    private void SomeOtherMethod() 
    { 
    // page must implement ISomeService, throws an exception otherwise 
    (Page as ISomeService).Method1(); 
    } 
} 
相關問題