다음 시나리오에 대한 대답을 찾으려고 시도했지만 대답이 나오지 않았습니다. 이것은 필자 자신의 입장으로 볼 때 전체 프리즘 개념을 완전히 이해하지 못했기 때문일 수 있습니다.프리즘 - 느슨하게 결합 된 어셈블리의 뷰 삽입
- 프레임 워크 프로젝트
- 쉘 프로젝트 : 내 방어, 난, 그래서
- MAINMENU 프로젝트 (모듈)
- SideMenu 프로젝트 (모듈)
- 상태 표시 프로젝트 (모듈)
- TestCont 엔타 프로젝트 (모듈)
- TestContentB 프로젝트 (모듈)
나는 다음과 같은 설정을 가지고 수많은 문학을 읽은 후 ... 부드러운하시기 바랍니다 이틀 전에 프리즘으로 찾기 시작
프레임 워크 프로젝트는 다른 것들, 이벤트 정의 및 페이로드 사이에 포함되어 있습니다.
쉘 프로젝트가의 shell.xaml 내 4 개 지역 :
- MainMenuRegion
- SideBarRegion
- StatusBarRegion
- ContentRegion 모든 비 쉘 프로젝트 참조가
다음 프리즘 어셈블리에 :
- Microsoft.Practices.Prism
- Microsoft.Practices.ServiceLocation
- Microsoft.Practices.Unity
쉘 프로젝트 갖는 이러한 어셈블리에 더하여 기준으로 :
- Microsoft.Practices.Prism.UnityExtensions
모든 프로젝트에는 Framework 프로젝트에 대한 참조가 있지만 솔루션 내의 다른 프로젝트에 대한 참조는 없습니다.
이 시점에서 나는 everthing이 계획대로 작동한다는 것을 지적하고자합니다.
MainMenuView 프로젝트에는 MainMenuViewModel에 명령이있는 몇 개의 MenuItem이 있습니다.
EventAggregator를 사용하는 ViewModel은 Framework 프로젝트에서 선언 된 몇 가지 이벤트를 게시합니다. 쉘 프로젝트에서
에서, ShellViewModel는 "ContentRegion"에 대한 제어로 ContentControl을 사용하여 이러한 이벤트, 예컨대 :에 가입, 나는 아무런 문제없이 TestContentA 및 TestContentB 사이를 전환 할 수 있습니다.순간을 위해, TestContentA 및 TestContentB 모두는 내가 뭘하고 싶은 것은 대신 ContentControl을 컨트롤에 새로운 TabItem의로있는 TabControl에 TestContentA 및 TestContentB를 주입입니다
.RegisterViewWithRegion method(...)
사용하여 등록된다.
그래서 shell.xaml에는 "TabRegion"이라는 추가 영역과 함께 TabControl이 포함되어 있습니다. I는 다음
.RegisterViewWithRegion(...)
방법을 사용하여, 다시 TabRegion 에 ContentRegion에서 등록 영역을 변경. 이 한,
IRegion tabRegion = regionManager.Regions["TabRegion"];
var tabView1 = container.Resolve();
tabRegion.Add(tabView1, "FirstTabView");
나는 ShellViewModel에 컨테이너를 가지고 있지 않지만 나는 여기가 않았더라도, 나는 여전히 TestContentA보기를 참조 할 수 없습니다 :
내가 좋아하는 예를 많이 보았다 그 자체가 런타임에 발견 될 다른 어셈블리에서.
온라인에서 찾을 수있는 샘플과 달리, 삽입 될보기가 항상 샘플 프로젝트에있는 것처럼 보입니다. 찾아 가기 방법에서는
(디버깅 목적) I 코드 추가하면 :var tabRegion = regionManager.Regions["TabRegion"];
다음 I가 tabRegion가보기 컬렉션이 볼 수 있고, 이러한 관점에서 I는 TestContentA에서 모두보기를 볼 수 및 뷰가 올바르게 등록되었다는 것을 알려주는 TestContentB. 문제는 뷰의 새로운 인스턴스를 TabItem으로 삽입 할 수 있도록 뷰를 잡는 방법을 모른다는 것입니다.
치트 및 TestContentA에 대한 참조를 추가하면보기를 추가하기 만하면 TabItem이 나타납니다. 이것 역시 나에게 내가 인 것을 말해 준다. 물론, 아무런 참고도 원하지 않는다.
요약하면, 내 질문은 다음과 같습니다
이 어떻게 응용 프로그램이 시작될 때 발견되는 느슨하게 결합 된 어셈블리에서보기를 삽입 할 수 ?
내가 할 수 있다고 확신하는 누군가가 올바른 방향으로 나를 가리킬 수 있다면 그것을 주셔서 감사하겠습니다.
시간을내어 읽어 주셔서 감사합니다.
감사합니다 moran-moshe, 위의 모듈 (_TestControlA_ 및 _TestControlB_)이 올바르게 등록되었습니다. 뷰가 _IRegion_ "TabRegion"의 _Views_ 컬렉션에 올바르게 등록 된 것을 볼 수 있습니다. 나는이 점을이 게시물에서 언급했다. 내가 가지고있는 문제는 ** Shell ** Project에 있습니다. 여기서는 느슨하게 결합 된 어셈블리에 대한 참조가 없습니다. '.AddToRegion()' 메소드 구문은 뷰가 삽입 될 영역의 이름 (TabRegion)과 뷰의 이름을 요청합니다. 그 견해는 제가 도달 할 수없는 것입니다. – user3235445
예를 들어 Unity를 사용하면 각 컨트롤 (TestControlA 및 TestControlB)에서 IRegionManager를 가져 와서 뷰를 영역에 추가 할 수 있습니다. 귀하의 모든 의견은 지역 이름입니다. –
지금 보았던 _TabRegion_ 영역에 새 뷰를 주입하려는 MainMenu 이벤트에 쉘을 가입 시켰습니다. 셸에서 구독을 제거한 후 TestModelA 및 TestModelB ViewModels에서 동일한 이벤트를 구독합니다. 여기에서 알려진 _TabControl_ 영역에보기를 추가합니다. 이것은 매력처럼 작동합니다. 고마워요. 나는 기꺼이 대답으로 당신의 도움을 투표, 좋은 하루 되세요! – user3235445