문제

이는 WPF 또는 Prism에 대한 복합 애플리케이션 지침과 관련이 있습니다.

내 셸에는 하나의 "MainRegion"이 있습니다.내 다양한 ​​모듈이 이 기본 영역에 로드됩니다.메뉴에 사용 가능한 모듈 목록을 입력하고 로드할 모듈을 선택할 수 있습니다.메뉴를 클릭하면 다음과 같이 됩니다.

var module = moduleEnumerator.GetModule(moduleName);
moduleLoader.Initialize(new[] { module });

처음에는 모듈의 초기화() 메서드가 실행되었기 때문에 모든 것이 정상적으로 작동하지만, Module1, Module2 및 Module3이 초기화된 후에 Module2를 다시 로드하기 위해 클릭하면 아무 일도 일어나지 않습니다.

내 질문:초기화 메소드가 실행된 후 요청 시 모듈을 어떻게 활성화할 수 있나요?

도와주셔서 감사합니다!

도움이 되었습니까?

해결책

실제로 모듈을 활성화하지는 않습니다.지역에서 뷰를 활성화합니다.이것을 읽어보세요 기사.

초기화 메서드는 모든 모듈에 대해 한 번만 호출됩니다.LoadModule을 호출할 때 활성화되는 모듈의 뷰를 보고 있다는 사실은 Initialize 메서드가 뷰를 영역에 등록하기 때문이라고 생각합니다.그러면 보기가 활성화됩니다.보기가 두 개 이상인 경우 마지막으로 등록된 보기가 활성 보기가 됩니다.

뷰를 활성화하려면 영역의 Activate 메서드를 호출해야 합니다(삽입된 IUnityContainer 및 IRegionManager 가정)...

// Get a view from the container.
var view = Container.Resolve<MyView>();

// Get the region.
var region = RegionManager.Regions["MyRegion"];

// Activate the view.
region.Activate(view);

영역 제어 유형에 따라 기존 뷰를 대체하거나 추가합니다.

다른 팁

Regions의 Remove 메서드를 호출하여 뷰를 제거할 수 있습니다.

public void RemoveViewFromRegion(string viewName, string regionName, object defaultView)
    {
      IRegion region = regionManager.Regions[regionName];
      object view = region.GetView(viewName);
      region.Remove(view);
      region.Activate(defaultView); 
    }

귀하의 지역이 될 ContentControl이 있어야 합니다.그런 다음 이 영역에 모든 모듈을 추가해야 합니다.메뉴를 클릭할 때 특정 모듈을 활성화하려면 해당 영역의 Activate(...) 메서드를 사용해야 합니다.

이는 모듈을 활성화하면 해당 모듈과 겹칠 수 있는 다른 모듈이 Visibility.Collapsed로 설정된다는 의미입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top