Prism은 어떻게 View상호작용 view를 호출하는가
중단한 프로젝트/WPF_PrismLibrary(추후진행)2019. 2. 19. 11:31
기본적인 WPF의 경우
window에서 다른 usercontrol을 출현시키기 위해서는 해당 usercontrol을 알고 있어야 했다.
그것을 prism에서 어떻게 분리하였는지 확인해본다.
https://github.com/2Bbear/WindowsProgrmaDevelop/tree/master/WPF/UsingMvvmPrismLibrary/05-ViewInjection
참고는 이곳에서 하면 된다
1 2 3 4 5 6 7 8 9 10 11 12 | public partial class App : PrismApplication { protected override Window CreateShell() { return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { } } | cs |
app에서 시작 윈도우로 MainWindow를 지정해 놓았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public partial class MainWindow : Window { IContainerExtension _container; IRegionManager _regionManager; public MainWindow(IContainerExtension container, IRegionManager regionManager) { InitializeComponent(); _container = container; _regionManager = regionManager; } /* 어차피 regionmanager에 등록하는 과정이다. 바로 registerviewwithregion으로 하나 분리하여 등록 명 따로 붙일 view따로 하나 하는 행동은 같은 것이다. */ private void Button_Click(object sender, RoutedEventArgs e) { var view = _container.Resolve<ViewA>(); _regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); //IRegion region = _regionManager.Regions["ContentRegion"]; //region.Add(view); } } | cs |
Main윈도우를 확인하면 IContainerExtension 과 IregionManager가 멤버 변수로 되어 있는데 이는 생성자에서 받을 수 있는 현재 retion manager와 container를 저장하고 있기 위함이다.
이후 Button_Click메소드가
1 2 3 4 5 6 7 8 9 10 11 | <Window x:Class="ViewInjection.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="http://prismlibrary.com/" Title="Shell" Height="350" Width="525"> <DockPanel LastChildFill="True"> <Button DockPanel.Dock="Top" Click="Button_Click">Add View</Button> <ContentControl prism:RegionManager.RegionName="ContentRegion" /> </DockPanel> </Window> | cs |
mainwindow xaml에서 이렇게 붙어있게된다.
이후 컴파일시에는 ContentRegion이라는 것이 무엇인지 몰라 출력하지 않고 있다가
런타임에서 버튼 클릭시 해당 view를 regionmanager에 등록시키는 과정을 진행하여 런타임으로 붙을 수 있게 한다.
'중단한 프로젝트 > WPF_PrismLibrary(추후진행)' 카테고리의 다른 글
Prism은 어떻게 모듈을 관리하는가 (0) | 2019.02.19 |
---|---|
Prism은 어떻게 View를 다른 View로 변경하는가 (0) | 2019.02.19 |
Prism은 어떻게 View에서 View를 호출하는가 - ViewDiscovery (0) | 2019.02.19 |
Region이란 무엇인가 (0) | 2019.02.19 |
Prism의 구성 Bootstrapper 와 Shell (0) | 2019.02.19 |