2012-03-30 2 views
0

현재 응용 프로그램과 함께 실행되는 일반적인 Scenerio는 여러 클래스를 통해 라우트하고 이벤트를 처리해야하는 곳입니다.C#의 여러 클래스를 통해 이벤트 라우팅

다음은 클래스 계층 구조의 샘플입니다.

액션 매니저 MainWindow를 PresentationManager MenuManager 메뉴 MenuButton

메뉴 모음은 MenuButton의 클릭 이벤트에 등록합니다. 그런 다음 CustomAction 객체를 만들고 MenuManager에 가입 한 이벤트를 발생시킵니다. MenuManager 이벤트 처리기에서 차례대로 PresentationManager에서 구독하는 이벤트를 발생시킵니다.

void MenuManager_ActionGenerated(object sender, CustomActionEventArgs e) 
    { 
      if (ActionGenerated != null) 
       ActionGenerated(sender, e); 
    } 

나는 메뉴 수준에서 이벤트를 발생하고, 액션 매니저 수준에서 그것을받을 수있는 방법이있을 것이라고 기대했다 : 여기

는 PresentationManager 구현 무엇의 샘플입니다.

내가 현재하고있는 일이 좋지 않은가요?

+0

이 기사 참조 http://weblogs.asp.net/vblasberg/archive/2010/03/30/wpf-routed-events-bubbling-several-layers-up .aspx – Diego

답변

0

클래스 계층 구조로 표시 한 것이 실제로는 시각적 트리 인 경우 라우팅 된 이벤트와 같은 것으로 들립니다.

http://msdn.microsoft.com/en-us/library/ms742806.aspx

는 개인적으로, 나는 이벤트를 많이함으로써 무서워. 탈퇴에주의하지 않으면 개체의 수명을 연장 할 수 있습니다. 또한 단단 결합으로 인해 시험 가능성이 감소 될 수 있습니다. 어떤 경우에는 Commanding 패턴을 사용하는 것이 더 나은 방법입니다.

+0

커맨드 패턴을 설명해 주시겠습니까? – WPFNewbie

+0

.NET에서의 나쁜 누출 인 이벤트 처리기에 대한 두 가지 긴 작업 시간 동안 객체가 고정되어있는 상태에서 나는 과거에 문제가 발생했습니다. – WPFNewbie

+0

이벤트 수집기와 개념이 같습니다. WPF에서 Commanding으로 빌드 - http://msdn.microsoft.com/ko-kr/library/ms752308.aspx. 프리즘과 같은 많은 프레임 워크에는 Event Aggregator 패턴이 내장되어 있습니다. – foson

0

직접 작성하실 수 있습니다 SubscriptionManager.

단순화함으로써 Dicationary<string, List<Action<...>>> 일 수 있습니다. 키가 event-name이고, 값이 ListAction입니다. 발생시킨 wen을 실행하는 값입니다.

그래서 모든 yuor 구성 요소는 지정된 이벤트 목록에 Action<..>을 추가하여 지정된 이벤트를 구독합니다.

그리고 언제나 SubscriptionManager을 통해 제기 된 짝수 인 경우 목록의 모든 Action<..>이 실행됩니다.

기본 아이디어. 이 제작을 준비하려면 좀 더 코드를 작성해야합니다.

행운을 빈다.

+0

GuyVdn이 언급 한 Event Aggregator와 비슷합니까? ActionManager는 실제로 작업을 대기열에 넣은 다음 실행을 위해 전달하는 디스패처입니다. 원래 우리는이 객체를 생성하는 모든 액션 객체가 직접 호출 할 수있는 싱글 톤을 만들었지 만, 이것이 이것을 단단히 결합시킨 것이라고 생각했습니다. – WPFNewbie

+0

@WPFNewbie :'Event Aggregator'는 모르지만 처음 모습을 드러낸다. * similiar 같다. 차이점은 여기에는 '공개자'가 없다는 것입니다. 모든 이벤트는 하드 코딩되어'SubscriptionManager'에 들어갑니다. 긴밀한 결합이란? 모든 이벤트에는 연결된 대리자/동작이 있습니다. 그것은 지금도 그렇게합니다. 그래서 이런 종류의 구조를 갖는 데는 문제가 없습니다. – Tigran

+0

우리는 Action Dispatcher 클래스를 각 항목이 직접 액세스하여 큐에 배치 한 싱글 톤으로 만들었다면 참조하려고했습니다. 그런 다음 Action Dispatcher는 이벤트를위한 라우터와 같은 종류의 이벤트를 전달합니다. 이를 위해서는 각 클래스가 Action Dispatcher 클래스에 대해 알고 그것을 강하게 결합해야합니다. – WPFNewbie

관련 문제