첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ IRegionManager 인터페이스 : RequestNavigate 메소드를 사용해 탐색 완료시 통지받기

------------------------------------------------------------------------------------------------------------------------


TestSolution.zip


[TestLibrary 프로젝트]

 

ViewA.xaml

 

 

<UserControl x:Class="TestLibrary.Views.ViewA"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:prism="http://prismlibrary.com/"             

    prism:ViewModelLocator.AutoWireViewModel="True">

    <Grid>

        <TextBlock

            HorizontalAlignment="Center"

            VerticalAlignment="Center"

            FontSize="48"

            Text="View A" />

    </Grid>

</UserControl>

 

 

ViewA.xaml.cs

 

 

using System.Windows.Controls;

 

namespace TestLibrary.Views

{

    /// <summary>

    /// 뷰 A

    /// </summary>

    public partial class ViewA : UserControl

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - ViewA()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public ViewA()

        {

            InitializeComponent();

        }

 

        #endregion

    }

}

 

 

ViewAViewModel.cs

 

 

using Prism.Mvvm;

 

namespace TestLibrary.ViewModels

{

    /// <summary>

    /// 뷰 A 뷰 모델

    /// </summary>

    public class ViewAViewModel : BindableBase

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - ViewAViewModel()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public ViewAViewModel()

        {

        }

 

        #endregion

    }

}

 

 

ViewB.xaml

 

 

<UserControl x:Class="TestLibrary.Views.ViewB"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:prism="http://prismlibrary.com/"             

    prism:ViewModelLocator.AutoWireViewModel="True">

    <Grid>

        <TextBlock

            HorizontalAlignment="Center"

            VerticalAlignment="Center"

            FontSize="48"

            Text="View B" />

    </Grid>

</UserControl>

 

 

ViewB.xaml.cs

 

 

using System.Windows.Controls;

 

namespace TestLibrary.Views

{

    /// <summary>

    /// 뷰 B

    /// </summary>

    public partial class ViewB : UserControl

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - ViewB()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public ViewB()

        {

            InitializeComponent();

        }

 

        #endregion

    }

}

 

 

ViewBViewModel.cs

 

 

using Prism.Mvvm;

 

namespace TestLibrary.ViewModels

{

    /// <summary>

    /// 뷰 B 뷰 모델

    /// </summary>

    public class ViewBViewModel : BindableBase

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - ViewBViewModel()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public ViewBViewModel()

        {

        }

 

        #endregion

    }

}

 

 

TestLibraryModule.cs

 

 

using Prism.Ioc;

using Prism.Modularity;

 

using TestLibrary.Views;

 

namespace TestLibrary

{

    /// <summary>

    /// 테스트 라이브러리 모듈

    /// </summary>

    public class TestLibraryModule : IModule

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 초기화시 처리하기 - OnInitialized(containerProvider)

 

        /// <summary>

        /// 초기화시 처리하기

        /// </summary>

        /// <param name="containerProvider">컨테이너 공급자 인터페이스</param>

        public void OnInitialized(IContainerProvider containerProvider)

        {

        }

 

        #endregion

        #region 타입 등록하기 - RegisterTypes(containerRegistry)

 

        /// <summary>

        /// 타입 등록하기

        /// </summary>

        /// <param name="containerRegistry">컨테이너 레지스트리 인터페이스</param>

        public void RegisterTypes(IContainerRegistry containerRegistry)

        {

            containerRegistry.RegisterForNavigation<ViewA>();

            containerRegistry.RegisterForNavigation<ViewB>();

        }

 

        #endregion

    }

}

 

 

[TestProject 프로젝트]

 

MainWindow.xaml

 

 

<Window x:Class="TestProject.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/"

    prism:ViewModelLocator.AutoWireViewModel="True"

    Width="800"

    Height="600"

    Title="{Binding Title}"

    FontFamily="나눔고딕코딩"

    FontSize="16">

    <DockPanel LastChildFill="True">

        <StackPanel DockPanel.Dock="Top"

            Margin="5"

            Orientation="Horizontal">

            <Button

                Margin="10"

                Padding="5"

                Command="{Binding NavigateCommand}"

                CommandParameter="ViewA"

                Content="Navigate to View A" />

            <Button

                Margin="10"

                Padding="5"

                Command="{Binding NavigateCommand}"

                CommandParameter="ViewB"

                Content="Navigate to View B" />

        </StackPanel>

        <ContentControl

            Margin="10"

            prism:RegionManager.RegionName="ContentRegion" />

    </DockPanel>

</Window>

 

 

MainWindow.xaml.cs

 

 

using System.Windows;

 

namespace TestProject.Views

{

    /// <summary>

    /// 메인 윈도우

    /// </summary>

    public partial class MainWindow : Window

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainWindow()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainWindow()

        {

            InitializeComponent();

        }

 

        #endregion

    }

}

 

 

MainWindowViewModel.cs

 

 

using Prism.Commands;

using Prism.Mvvm;

using Prism.Regions;

 

namespace TestProject.ViewModels

{

    /// <summary>

    /// 메인 윈도우 뷰 모델

    /// </summary>

    public class MainWindowViewModel : BindableBase

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 영역 관리자 인터페이스

        /// </summary>

        private readonly IRegionManager regionManager;

 

        /// <summary>

        /// 제목

        /// </summary>

        private string title = "IRegionManager 인터페이스 : RequestNavigate 메소드를 사용해 탐색 완료시 통지받기";

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 제목 - Title

 

        /// <summary>

        /// 제목

        /// </summary>

        public string Title

        {

            get

            {

                return this.title;

            }

            set

            {

                SetProperty(ref this.title, value);

            }

        }

 

        #endregion

        #region 탐색하기 명령 - NavigateCommand

 

        /// <summary>

        /// 탐색하기 명령

        /// </summary>

        public DelegateCommand<string> NavigateCommand { get; private set; }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainWindowViewModel(regionManager)

 

        /// <summary>

        /// 생성자

        /// </summary>

        /// <param name="regionManager">영역 관리자 인터페이스</param>

        public MainWindowViewModel(IRegionManager regionManager)

        {

            this.regionManager = regionManager;

 

            NavigateCommand = new DelegateCommand<string>(Navigate);

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region 탐색 콜백 처리하기 - NavigationCallback(result)

 

        /// <summary>

        /// 탐색 콜백 처리하기

        /// </summary>

        /// <param name="result">탐색 결과</param>

        private void NavigationCallback(NavigationResult result)

        {

            MessageBox.Show(string.Format("Navigation to {0} complete. ", result.Context.Uri));

        }

 

        #endregion

        #region 탐색하기 - Navigate(navigatePath)

 

        /// <summary>

        /// 탐색하기

        /// </summary>

        /// <param name="navigatePath">탐색 경로</param>

        private void Navigate(string navigatePath)

        {

            if(navigatePath != null)

            {

                this.regionManager.RequestNavigate("ContentRegion", navigatePath, NavigationCallback);

            }

        }

 

        #endregion

    }

}

 

 

MainApplication.xaml

 

 

<prism:PrismApplication x:Class="TestProject.MainApplication"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:prism="http://prismlibrary.com/">

</prism:PrismApplication>

 

 

MainApplication.xaml.cs

 

 

using System.Windows;

 

using Prism.Ioc;

using Prism.Modularity;

using Prism.Unity;

 

using TestLibrary;

using TestProject.Views;

 

namespace TestProject

{

    /// <summary>

    /// 메인 애플리케이션

    /// </summary>

    public partial class MainApplication : PrismApplication

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Protected

 

        #region 쉘 생성하기 - CreateShell()

 

        /// <summary>

        /// 쉘 생성하기

        /// </summary>

        /// <returns></returns>

        protected override Window CreateShell()

        {

            return Container.Resolve<MainWindow>();

        }

 

        #endregion

        #region 타입 등록하기 - RegisterTypes(containerRegistry)

 

        /// <summary>

        /// 타입 등록하기

        /// </summary>

        /// <param name="containerRegistry">컨테이너 레지스트리 인터페이스</param>

        protected override void RegisterTypes(IContainerRegistry containerRegistry)

        {

        }

 

        #endregion

        #region 모듈 카탈로그 구성하기 - ConfigureModuleCatalog(moduleCatalog)

 

        /// <summary>

        /// 모듈 카탈로그 구성하기

        /// </summary>

        /// <param name="moduleCatalog">모듈 카탈로그 인터페이스</param>

        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)

        {

            moduleCatalog.AddModule<TestLibraryModule>();

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요