C#/Prism

[C# - Prism] 프리즘 예제 19 - NavigationParticipation

반나무 2023. 9. 13. 21:28

안녕하세요, 반나무입니다.

이번 예제는 NavigationParticipation 예제입니다.

 

예제코드들을 보다보면 영어공부를 더 많이 하게 되는것 같습니다.

Participation = 참여

 

 

뜻을 직역하자면 네비게이션 참여.

코드를 보고, 예제를 확인해보면 단순히 Region을 Navigate하기보단 해당 Region에 직접 참여해 조작하는 모습을 볼 수 있습니다.

 

NavigationParticipation

CommandParameter를 통해 ViewA와 ViewB를 Region에 Navigate하는 부분이있습니다.

<DockPanel LastChildFill="True">
    <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="5" >
        <Button Command="{Binding NavigateCommand}" CommandParameter="ViewA" Margin="5">Navigate to View A</Button>
        <Button Command="{Binding NavigateCommand}" CommandParameter="ViewB" Margin="5">Navigate to View B</Button>
    </StackPanel>
    <TabControl prism:RegionManager.RegionName="ContentRegion" Margin="5"  />
</DockPanel>
private void Navigate(string navigatePath)
{
    if (navigatePath != null)
        _regionManager.RequestNavigate("ContentRegion", navigatePath);
}

ModuleA

ViewAViewModel.cs

앞선 예제와는 다르게 INavigationAware를 인터페이스로 받고있습니다.

INavigationAware는 대부분 Navigate된 View의 ViewModel에서 사용하며, Navigate들어올때, 나갈때 이벤트를 발생시켜 편하게 조작이 가능합니다.

public class ViewAViewModel : BindableBase, INavigationAware
{
    ...
    
    private int _pageViews;
    public int PageViews
    {
        get { return _pageViews; }
        set { SetProperty(ref _pageViews, value); }
    }

    // Navigate될 때 실행된다.
    public void OnNavigatedTo(NavigationContext navigationContext)
    {
        PageViews++;
    }
	
    // 해당 Navigation 인스턴스를 새로만들지, 기존 인스턴스를 사용할지 확인한다.
    public bool IsNavigationTarget(NavigationContext navigationContext)
    {
        return true;
    }
	
    // Navigation에서 빠져나갈때 실행된다.
    public void OnNavigatedFrom(NavigationContext navigationContext)
    {

    }
}

 

IsNavigationTarget을 false로 변경하면 인스턴스를 새로 만들게 됩니다.

ViewAViewModel을 false로 변경하니 해당 Navigate가 계속 생성되는 모습을 볼 수 있습니다.

반응형