내 대답을 찾았습니다. 접근 방식은 다음과 같습니다. 시작할 때 모든 모듈을로드 한 다음 필요에 따라보기를 활성화 및 비활성화합니다. 이 문제를 CodeProject 기사로 작성 하겠지만 다음은 코드 작성 방법에 대한 개요입니다.
(1) 모듈 Initialize() 메소드에서 모듈을 추가하지만 활성화하지는 마십시오.
public void Initialize()
{
// Get main region
var mainRegion = m_RegionManager.Regions["MainRegion"];
// Load Module B
var newView = new ModuleBView();
mainRegion.Add(newView, "ModuleA.ModuleAView");
}
Add() 메서드에는 두 개의 매개 변수가 있습니다. 두 번째 매개 변수는 뷰의 이름이며 뷰의 ToString() 메서드에서 생성 한 값으로 설정됩니다. 우리는 왜 다음 단계로 나아갈 지 알게 될 것입니다.
(2)보기를 활성화 할 때 이전보기를 비활성화해야합니다. 그러나 우리는보기의 이름을 알 수 없습니다, 그래서 우리는 모든 활성 뷰를 비활성화 : 우리는() 값을, 우리는 아무것도 모른 채 이름을 쉽게 얻을 수의 ToString와 같은 각 뷰의 이름을 설정 때문에
public static void ClearRegion(IRegion region)
{
// Get existing view names
var oldViewNames = new List<string>();
foreach (var v in region.Views)
{
var s = v.ToString();
oldViewNames.Add(s);
}
// Remove existing views
foreach (var oldViewName in oldViewNames)
{
var oldView = region.GetView(oldViewName);
region.Deactivate(oldView);
}
}
그들에 대해 사전에.
(3) 이제 새보기를 활성화합니다. 나는 MVVM ICommand.Execute() 메소드를 수행
public void Execute(object parameter)
{
// Get main region
var mainRegion = m_ViewModel.RegionManager.Regions["MainRegion"];
// Clear region
ModuleServices.ClearRegion(mainRegion);
// Activate Module A view
var moduleAView = mainRegion.GetView("ModuleA.ModuleAView");
mainRegion.Activate(moduleAView);
}
바라 건데, 그게 당신이 가야하기에 충분합니다. 내가 말했듯이, 나는 CodeProject를위한 데모 코드로 더 완전한 writeup을 할 계획이다.
데이비드 비니 만
프리시전 시스템