2017-04-15 3 views
0

저는 WPF 응용 프로그램을 작성 중이며 PrismUnity을 사용하여 화면에서 화면으로 이동합니다. 내가 가진 문제는 내 스크린이 다른 지역 레이아웃을 가지고 있다는 것입니다.Prism and Unity를 사용하여 다른 지역 레이아웃으로 이동하는 방법은 무엇입니까?

예를 들어 (이미지를 참조하십시오), 첫 번째 화면에는 2 개의 영역 (영역 1과 영역 2)이 있으며 사용자가 버튼을 클릭하면 1 개의 영역 (영역 3) 만있는 두 번째 화면으로 이동합니다. enter image description here

나는 작동하지 않습니다. 또한 region 2를 숨기고 region 2에 제 2 화면을 주입하려고했습니다. region 2는 숨기지 만 축소하지는 않습니다. 그래서 오른쪽에 커다란 공백이 있습니다.

이 부분은 Shell.xaml 파일에 영역이 있음을 나타내는 article이 스택 오버플로에서 발견되었으며 다중 영역 레이아웃을 표시 할 다른 영역을 만듭니다.

<ContentControl prism:RegionManager.RegionName="{x:Static inf:RegionNames.ShellMainRegion}" /> 

을 그리고 나는 IModule 인터페이스를 구현하는 클래스의 초기화 방법에 지역, 뷰 모델과 뷰를 등록 :

그래서 내 Shell.xaml 파일은 다음과 같습니다.

_container.RegisterType<IRegion1And2ViewModel, Region1And2ViewModel>(); 
_container.RegisterType<IRegion1And2View, Region1And2View>(); 

_container.RegisterType<IRegion1ViewModel, Region1ViewModel>(); 
_container.RegisterType<IRegion1View, Region1View>(); 
_container.RegisterType<IRegion2ViewModel, Region2ViewModel>(); 
_container.RegisterType<IRegion2View, Region2View>(); 
_container.RegisterType<IRegion3ViewModel, Region3ViewModel>(); 
_container.RegisterType<IRegion3View, Region3View>(); 


IRegion shellMainRegion = _regionManager.Regions[RegionNames.ShellMainRegion]; 

var region1And2VM = _container.Resolve<IRegion1And2ViewModel>(); 
IRegionManager region1And2RegionManager = shellMainRegion.Add(region1And2VM.View); 

IRegion region1 = region1And2RegionManager.Regions[RegionNames.Region1]; 
IRegion region2 = region1And2RegionManager.Regions[RegionNames.Region2]; 

var region1VM = _container.Resolve<IRegion1ViewModel>(); 
var region2VM = _container.Resolve<IRegion2ViewModel>(); 
region1.Add(region1VM.View); 
region2.Add(region2VM.View); 
region1.Activate(region1VM.View); 

var region3VM = _container.Resolve<IRegion3ViewModel>(); 
shellMainRegion.Add(region3VM.View); 

앱을 실행하면 첫 번째 화면이 잘 보입니다 (지역 1 및 2 사용). 그러나 단추를 클릭하고 다음 코드를 호출하면 영역 1 및 2 레이아웃이 남아 영역 1보기가 더 이상 표시되지 않고 영역 3보기 (셸 주 영역에 표시되어야 함)가 표시되지 않습니다. 모든.

IRegion shellMainRegion = _regionManager.Regions[RegionNames.ShellMainRegion]; 
shellMainRegion.RequestNavigate(typeof(Region3View).Name); 

프리즘 및 유니티를 사용하여 다른 영역 레이아웃으로 화면을 표시하는 데 필요한 코드를 누군가에게 보여줄 수 있습니까?

당신이 정말이 시간에 6.3 프리즘의 최신 버전을 사용해야합니다, 당신에게

답변

0

먼저 감사드립니다. 귀하의 질문에 포함 된 링크는 오래된 버전이며 더 이상 지원되지 않습니다. 최신 비트는 https://github.com/PrismLibrary/Prism입니다. NuGet을 통해 프로젝트/솔루션에 최신 버전을 추가 할 수 있습니다.

이제 탐색에 문제가 있습니다. RequestNavigate 호출을 수행하도록 작성된 코드에서 지역 관리자 (_regionManager)에 대한 참조가있는 것으로 보입니다. 그러나, 당신은 제대로 사용하고 있지 않습니다. ShellMainRegion에 대한 참조를 얻는 대신 간단히 RequestNavigate 메소드를 region 매니저에서 호출하십시오. 이것은 무엇을

_regionManager.RequestNavigate(RegionNames.ShellMainRegion, typeof(Region3View).Name);

쉘 영역을 찾기 위해 지역 관리자에게 신고하고, 그것에 Region3View를 표시합니다.

그래서,이 코드 줄 :

IRegion shellMainRegion = _regionManager.Regions[RegionNames.ShellMainRegion];

는 더 이상 필요하지 않습니다.

희망이 도움이됩니다.

관련 문제