2013-08-09 2 views
1

프리즘과 유니티를 사용하는 WPF 파일럿 프로젝트에서 작업 중이며 내 앱에는 3 개의 모듈이 있습니다.요청 방법 Prism 4에서 Unity IoC를 사용하여 뷰 간 이동

모듈 A는 2 개의보기를 가지고 있으며, 모듈 B는 1 개의보기를 가지고 있으며, 모듈 C는 1 개의보기 (본질적으로 메인 메뉴 임)를 가지고 있으며, 나는 나의 셸을 가지고있다. 쉘은 3 개의 region, ribbonRegion, leftRegion, rightRegion을가집니다.

지금 모듈 C의보기는 다른 모듈을 실행할 수있는 옵션 인 leftRegion 셸로로드됩니다. 작업을 선택하면 (현재 유일한 옵션입니다) 모듈 A 뷰 1은 왼쪽 영역에서 탐색되어 (주 메뉴 뷰 대체) 모듈 B 뷰 1이 rightRegion에서도 탐색됩니다.

모듈 A 뷰 1에는 leftRegion의 모듈 A 뷰 2도 탐색 할 수있는 버튼이 있으며 뒤로 이동할 수 있습니다.

LifetimeManagers를 이해하지 못했을 때이 모든 것이 훌륭하게 작동했습니다. 항상 A의 view1과 view2 사이를 오가며 B의 view1을 표시하면서 내 메뉴가 작동했습니다. 그러나 나는 나중에 A로 이동했을 때마다 A의 view1과 view2의 새로운 인스턴스가 해결되고 있음을 깨달았습니다. 이것은 새로운 ViewModel이 생성 될 때마다 새로운 뷰가 생성 될 때 문제가되었지만 LifetimeManagers에 대해 배우기 시작하여 과도 상태에서 제어 상태로 변경되었습니다. 그러나 그 다음 나의 탐색은 부서졌다.

ModuleA 정의 : 메인 메뉴에서

 container.RegisterType<Object, View1>(ViewNames.View1, new ContainerControlledLifetimeManager()); 
    container.RegisterType<Object, View2>(ViewNames.View2, new ContainerControlledLifetimeManager()); 

탐색 (B와 C에 대한 동일한 접근) :

regionManager.RequestNavigate(RegionNames.RightRegion, ViewNames.TifView); 
    regionManager.RequestNavigate(RegionNames.LeftRegion, ViewNames.View1); 

당신이,이 두 모듈의 전망이 기대하는 이러한 기능을 모두 확인 및 탐색 한 다음 View1이 주 메뉴보기를 대체합니다. 이제 Navigation은 View1의 명령에서 View2로 이동하려고 할 때 중단됩니다.

regionManager.RequestNavigate(RegionNames.LeftRegion, ViewNames.View2); 

그러나이 RequestNavigate는 작동하지 않습니다. 보기가 해석되지 않고 영역에 추가되어 탐색이 발생하지 않습니다. (명령이 올바르게 작동하고 작동하지 않습니다.)

View2가 아닌 경우 모듈 A의 View1이 해결되어 영역에 추가 된 이유는 무엇입니까? 두보기 모두 동일한 방식으로 등록되고 탐색됩니다. 실제로 주문을 변경하고 먼저 View2로 이동하여 View1 초로 시도하면 View2가 해결되지만 View1이 손상됩니다. 내가 알지 못하는 ContainerControlledLifetimeManager에 몇 가지 제한 사항이 있습니까?

이 탐색을 처리하는 방법에 대한 도움이 도움이 될 것입니다. 실제로이 소스를 찾을 위치가 어떨지, LifetimeManager 변경으로 인해 발생하는 문제입니까? 아니면 잘못 등록하거나 탐색하고 있습니까?

답변

1

보기 모델은보기가 아닌 평생 매니저가 있어야하는 유형입니다.

container.RegisterType<ViewModel1>(new ContainerControlledLifetimeManager()); 

또는 당신이 할 수있는 또 다른 옵션은이 (가) OnNavigatedTo 및 OnNavigatedFrom 방법에 포함에 필요한 복원/INavigationAware을 구현하고 저장 처리 할 수있는 VM

container.RegisterType<IViewModel1, ViewModel1>(new ContainerControlledLifetimeManager()); 

위한 인터페이스가 있다면.

0

비슷한 문제가있었습니다. 나에게보기 모델 중 하나의 "OnNavigatedFrom"메서드에서 예외가 발생했습니다.프리즘 프레임 워크는 분명히 예외를 잡았지만 네비게이션 요청은 여전히 ​​실패했습니다.

문제는 네비게이션을 요청한 뷰 (Viewmodel)가 아니라 탐색하는 뷰 (viewmodel)입니다. 그래서 탐색 순서를 변경하면 깨진 믿을 수있는보기가 다시 작동합니다.

다음 번에 비슷한 문제가 발생했을 때 첫 번째 예외를 설정하는 것이 좋습니다.

관련 문제