2010-03-12 4 views
1

작은 응용 프로그램으로 프리즘 (CAL)을 익히고 몇 가지 문제에 직면했습니다.프리즘 (CAL)이있는 로컬 범위의 복합 이벤트

그 자체로 일부 영역을 포함하는 MainView의 여러 인스턴스를 만들고 쉘에 표시합니다. 로컬로 범위가 지정된 영역을 사용하여 내 MainView에서 뷰 주입을 쉽게 처리하고 있습니다.

현재 MainView 내부의 뷰 (viewModels) 사이의 통신 방법을 찾고 있습니다. 복합 이벤트로 처리 할 수는 있지만, 이러한 이벤트를 게시 할 때마다 내 MainView의 모든 인스턴스에서 처리됩니다. 실제로는 원하지 않습니다.

로컬 범위 영역과 같은 "로컬 범위"복합 이벤트를 발생시키는 방법이 있습니까? 또는 내 경우에보기간에 더 나은 의사 소통 방법이있을 수 있습니까?

답변

0

발신자를 인수로 전달하십시오. (어쨌든, 응용 프로그램의 윈도우를 구별 할 수있는 방법이 있어야합니다.) 이벤트를 수신 할 때 현재 양식 ReferenceEquals가 발신인에게 전송되었는지 확인하십시오 (또는 'key'양식 확인).

+0

덕분에, 나는 이벤트 인수 중 하나로 키를 사용하는 방법에 대해 생각했다. 모든 작은 지역에서 복합 이벤트가 도처에 있다면 전체 애플리케이션의 성능에 영향을 미칠지 궁금합니다. – Shaddix

+0

글로벌 eventaggregator에 이벤트를 발생 시키면 모든 구독자가이를 처리해야합니다. 따라서 대답은 "모든 작은 지역에는 없지만 지역 가입자 만" –

+0

설명을 주셔서 감사합니다. – Shaddix

1

로컬 범위의 EventAggregator를 생성하고 MainView에서 생성 된 자식 UnityContainer에 등록 할 수도 있습니다 (로컬 범위 영역이 생성 된 동일한 위치).

이것은 로컬 범위 영역 imho와 동일합니다.

0

많은 논의 끝에 EventAggregator가 선택되었습니다. 경우에 서로 공유 그들은 같은 상황에있는 우리의 사고 과정은 그들에게 도움이 될 수 있습니다 :

:

(문제 문이 내 이전 코멘트 참조) 주요보기에서보기를 보유 할 지역이있다 (뷰 모델) 다른 모듈은 또한 TabItem보기를 구성하며 자체에 포함 된 하위보기 및 자체 정리를 담당합니다. 따라서 TabItem 닫기 이벤트에서이 기본보기 (ViewModel)는 정상적으로 종료되도록 자식보기를 알려야합니다.

종료 이벤트를 보내는 잠재적 인 후보로 EventAggregator와 .Net Eventing 모두 다양한 측면에서 철저히 조사되었습니다.

프리즘 분리 환경에서 주 뷰는 기술적으로 자식 뷰를 인식하지 못하고 그 반대의 경우도 있으므로 EventAggregator가 선택되었습니다.

이벤트 수집기와 관련된 한 가지 문제점은 전체 응용 프로그램에 이벤트를 게시한다는 것이지만, 우리는 이벤트가 닫히는 tabitemview에서 오는 이벤트를 필터링해야한다고 요구했습니다. EventAggregator는 종료 요청이 동일한 tabitemview (모든 tabItem에 대해 범위가 지정된 regionmanager를 사용했으며이 범위가 지정된 regionmanager가 필터로 사용됨)에서 오는 것인지 확인하기 위해 필터를 사용하도록 설계되었습니다. 그런 다음에 만 종료 작업을 실행합니다. 이렇게하면 한 탭에서 트리거링 종료가 동일한 지역 이름을 가진 다른 탭의 하위 뷰를 닫지 않습니다.

감사합니다, RDV

관련 문제