저자: 조광형
날짜: 2024년 11월 26일
1. Prism 소개
Prism은 WPF(Windows Presentation Foundation) 응용 프로그램의 모듈화, 테스트 가능성 및 유지 관리성을 증진시키기 위한 프레임워크입니다.
Prism은 MVVM(모델-뷰-뷰모델) 디자인 패턴을 지원하여 개발자가 유연하게 응용 프로그램 구조를 설계할 수 있도록 도와줍니다.
이 글에서는 Prism에서 내비게이션 기능을 구현하기 위한 방법과 내비게이션 서비스에 대한 개요를 제공합니다. 내비게이션은 사용자 경험에서 중요한 요소로,
다양한 화면 간 전환이나 콘텐츠 표시를 관리하는데 핵심적인 역할을 합니다.
2. 내비게이션의 기본 개념
내비게이션은 사용자 인터페이스의 여러 뷰 간 전환을 통해 사용자가 응용 프로그램을 탐색하도록 돕는 과정을 의미합니다.
Prism에서는 이러한 내비게이션을 효과적으로 구현하기 위해 내비게이션 서비스(NavigationService)를 사용합니다.
2.1 내비게이션의 중요성
잘 설계된 내비게이션은 사용자가 응용 프로그램의 기능을 쉽게 이해하고 필요한 정보를 빠르게 찾을 수 있도록 돕습니다.
사용자 경험을 극대화하기 위해 다양한 내비게이션 패턴과 모델이 사용될 수 있습니다. Prism은 이러한 요구를 충족하기 위한 강력한 구성을 제공합니다.
3. Prism에서의 내비게이션 서비스
Prism의 내비게이션 서비스는 다양한 뷰 간에 원활한 전환을 가능하게 하는 인터페이스를 제공합니다. 이를 통해 각 뷰는 독립적으로 관리되고,
필요한 경우에만 로드될 수 있습니다. 이러한 구조는 모듈화된 애플리케이션 개발을 위한 기초가 됩니다.
3.1 INavigationService 인터페이스
INavigationService
는 뷰 간 내비게이션을 관리하기 위한 기본 인터페이스입니다. 이 인터페이스는 뷰를 활성화하고,
매개변수를 전달하며, 이전 뷰로의 되돌리기를 지원합니다.
public interface INavigationService
{
void NavigateAsync(string uri);
void NavigateAsync(string uri, NavigationParameters parameters);
void GoBack();
void GoForward();
bool CanGoBack { get; }
bool CanGoForward { get; }
}
위 코드에서 볼 수 있듯이, 내비게이션 서비스는 여러 메소드를 제공하여 다양한 내비게이션 작업을 지원합니다.
3.2 NavigationParameters
NavigationParameters
는 뷰를 전환할 때 추가적인 데이터를 전달하는 데 사용되는 클래스입니다. 이를 통해
서로 다른 뷰 간에 필요한 정보를 전송할 수 있습니다.
public class NavigationParameters : Dictionary
{
public bool ContainsKey(string key);
public object GetValue(string key);
}
매개변수를 사용함으로써 데이터의 동적 전달과 처리 및 뷰의 상태 관리가 용이해집니다.
4. 내비게이션 구현 예제
이번 섹션에서는 Prism을 사용하여 간단한 내비게이션 예제를 구현하여 내비게이션 서비스가 어떻게 작동하는지 보여드리겠습니다.
예제에서는 두 개의 뷰(페이지)를 생성하고 각 뷰 간에 데이터를 전송하며 전환하는 과정을 살펴보겠습니다.
4.1 프로젝트 설정
새로운 WPF 애플리케이션을 생성하고 Prism 라이브러리를 NuGet을 통해 추가합니다.
Install-Package Prism.Wpf
명령을 통해 설치할 수 있습니다.
4.2 뷰 생성
두 개의 뷰인 MainView와 SecondView를 생성합니다. MainView는 SecondView로의 내비게이션을
포함하고 있으며, SecondView는 데이터를 수신하고 표시하는 구조로 구성됩니다.
MainView.xaml
<UserControl x:Class="PrismExample.Views.MainView" ...>
<StackPanel>
<TextBox x:Name="InputTextBox" Width="200" />
<Button Content="Go to Second View"
Click="NavigateButton_Click" />
</StackPanel>
</UserControl>
SecondView.xaml
<UserControl x:Class="PrismExample.Views.SecondView" ...>
<StackPanel>
<TextBlock x:Name="ReceivedTextBlock" FontSize="24" />
<Button Content="Back" Click="GoBackButton_Click" />
</StackPanel>
</UserControl>
4.3 ViewModel 구현
각 뷰에 대한 ViewModel을 작성하여 내비게이션 로직을 처리합니다. MainViewModel은 사용자 입력을
받아 SecondView로 전송하는 역할을 합니다.
public class MainViewModel : BindableBase
{
private readonly INavigationService _navigationService;
public MainViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
}
private void NavigateButton_Click(object sender, RoutedEventArgs e)
{
var parameters = new NavigationParameters
{
{ "inputText", InputTextBox.Text }
};
_navigationService.NavigateAsync("SecondView", parameters);
}
}
4.4 SecondViewModel 구현
public class SecondViewModel : BindableBase, INavigationAware
{
private string _receivedText;
public string ReceivedText
{
get => _receivedText;
set => SetProperty(ref _receivedText, value);
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
if (navigationContext.Parameters.ContainsKey("inputText"))
{
ReceivedText = navigationContext.Parameters.GetValue("inputText");
}
}
public bool IsNavigationTarget(NavigationContext navigationContext) => true;
public void OnNavigatedFrom(NavigationContext navigationContext) { }
}
4.5 애플리케이션 실행 및 테스트
애플리케이션을 실행하면 MainView가 표시되고, 사용자가 텍스트 박스에 입력한 내용을 기반으로 SecondView로 이동할 수 있습니다.
SecondView는 전달된 데이터를 수신하여 화면에 표시합니다. 이 과정을 통해 Prism의 내비게이션 서비스를 효과적으로 활용할 수 있습니다.
5. 결론
Prism에서의 내비게이션 서비스는 WPF 애플리케이션에서 뷰간 전환을 쉽고 일관되게 처리하는 데 중요한 역할을 합니다.
INavigationService와 NavigationParameters를 사용하여 개발자는 효율적으로 모듈화된 애플리케이션을 구축할 수 있으며,
사용자 경험을 극대화할 수 있는 기회를 갖게 됩니다. 본 문서에서 설명한 내용을 기반으로 더 복잡한 내비게이션 모델을 구현해 나가시길 바랍니다.