2012-11-07 4 views
1

나는 이벤트를 정확하게 버블 링하기 위해 고심하고있다.이벤트를 여러 수준 위로 버블 링하는 방법은 무엇입니까?

사용자 정의 컨트롤이있는 마스터 페이지와 마스터 페이지의 하위 페이지가 있습니다.

사용자 정의 컨트롤과 페이지는 공통 데이터를 공유하므로 사용자 정의 컨트롤이 업데이트 될 때 페이지가 업데이트되고 반대의 경우도 마찬가지입니다.

사용자 정의 컨트롤은 이벤트를 마스터 페이지에 노출 시켰습니다. 이것은 내가 사용하는 형식입니다. 클래스의

외부 : 클래스 내부

public delegate void OfferBookmarkRemoved(int OfferID); 

:

public event OfferBookmarkRemoved OfferBookmarkRemoved; 

protected void LV_Bookmarks_ItemCommand(object source, ListViewCommandEventArgs e) 
{ 
    if (e.CommandName == "RemoveOffer") 
    { 
     var offerId = (int)e.CommandArgument; 

     OnOfferBookmarkRemoved(offerId); 
    } 

} 

void OnOfferBookmarkRemoved(int offerId) 
{ 
    offerId.ThrowDefault("offerId"); 

    if (OfferBookmarkRemoved != null) 
    { 
     OfferBookmarkRemoved(offerId); 
    } 
} 

지금이 확인 마스터 페이지에서 사용할 수 있습니다. 나는 마스터 페이지에서 무엇을하고 aspx 페이지는 다음과 같이 사용할 수 있도록 이벤트를 노출하고 싶지 않은 : 그래서 누락 된 비트가 마스터에서 이벤트를 수신하고 확인하는 것입니다

Master.OfferBookmarkRemoved += OnBookmarkRemoved; 

void OnBookmarkRemoved(int offerId) 
{ 
    offerId.ThrowDefault("offerId"); 

    OfferList1.UpdateBookmark(offerId); 
} 

페이지에서 사용할 수 있습니다.

아무도 도와 줄 수 있습니까?

+0

확인이 당신을 도울 수 있습니다처럼 이벤트가 보일 것입니다 http://www.codeproject.com/Articles/417682/Exposing-Custom-event-from -custom-control –

답변

2

당신은 그렇게 또한 마스터 페이지에서이 이벤트를 정의 할 필요가 : 마스터 이벤트에 등록하는 모든 페이지가 UserControl을 이벤트에 등록됩니다

public event EventHandler<OfferEventArgs> OfferBookmarkRemoved 
{ 
    add 
    { 
     userControl.OfferBookmarkRemoved += value; 
    } 
    remove 
    { 
     userControl.OfferBookmarkRemoved -= value; 
    } 
} 

이 방법을.

그런데 이벤트 패턴을 따르고 있지 않습니다. 호출 할 때

public class OfferEventArgs : EventArgs 
{ 
    public int OfferID { get; set; } 
} 

public event EventHandler<OfferEventArgs> OfferBookmarkRemoved; 

과 :

OfferBookmarkRemoved(new OfferEventArgs() { OfferID = offerId }); 
+0

감사합니다 Amiram, 나는 그것을 줄 것이고 당신에게 돌아갈 것이다. – dotnetnoob

+0

나는 조금 Amiram 고투하고있다. 공개 이벤트 코드를 복사 할 때 중괄호를 사용하자마자 구문 오류가 발생합니다. 어떤 아이디어? – dotnetnoob

+0

이벤트 유형을 잊어 버렸습니다. 내 대답 수정 –