2Bbear's knowledge workshop

이 내용은 ViewDiscovery에 대한 내용이다.

https://github.com/2Bbear/WindowsProgrmaDevelop/tree/master/WPF/UsingMvvmPrismLibrary/04-ViewDiscovery

참조는 04번 항목을 참조하면 된다.



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
  public partial class MainWindow : Window
    {
        public MainWindow(IRegionManager regionManager)
        {
            InitializeComponent();
            //view discovery
            regionManager.RegisterViewWithRegion("ContentRegion"typeof(ViewA));
regionManager.RegisterViewWithRegion("ContentRegion_Main",typeof(MyView));
        }
    }
cs


MainWindow 생성자를 확인하면 매개변수로 IRegionManager를 받고있다.

이 RegionManager로 모든 View를 관리 할 수 있게 된다.


여기서 regionManger는 응용프로그램 생성 초기 단계에서 만들어진 객체이다.


이제 이 regionManger에 View를 등록해야한다. (등록 이름, 등록할 타입view)

이후


xaml에서는 이 등록 이름으로 각 view를 호출 할 수 있게 된다.

1
2
3
4
5
6
7
8
9
10
11
<Window x:Class="ViewDiscovery.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">
    <Grid>
        <ContentControl prism:RegionManager.RegionName="ContentRegion" />
        <ContentControl prism:RegionManager.RegionName="ContentRegion_Main" />
    </Grid>
</Window>
 
cs




이런 식으로 만들어 View가 직접적으로 View를 참조하지 못하게만들어 느슨하게 개발 할 수 있게되는 것이다... 호오.