C#/Prism

[C# - Prism] 프리즘 예제 21 - PassingParameters

반나무 2023. 9. 20. 23:56

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

이번예제는 Navigation을 사용 할 때 파라미터를 넘겨주는 예제입니다.

 

처음에는 아무것도 없다가, item들을 선택 할 때마다 하단의 TabControl에 View들이 추가되는것을 확인 할 수 있습니다.

PersonListViewModel.cs

파라미터를 넘겨주기위해서는 아무 타입이나 넘길 수 없으며,

NavigationParameters 클래스를 만들고 해당 클래스 내부의 Dictionary 타입에 값을 Add해야합니다.

private void PersonSelected(Person person)
{
    var parameters = new NavigationParameters();
    parameters.Add("person", person);

    if (person != null)
        _regionManager.RequestNavigate("PersonDetailsRegion", "PersonDetail", parameters);
}

 

PersonDetailViewModel.cs

파라미터를 등록하면 PersonDetailViewModel에 OnNavigatedTo()에 navigationContext로 들어오게 됩니다.

public void OnNavigatedTo(NavigationContext navigationContext)
{
    var person = navigationContext.Parameters["person"] as Person;
    if (person != null)
        SelectedPerson = person;
}

등록한 Key값으로 Value를 찾아 원했던 타입으로 변환하면 객체를 얻을 수 있습니다.

 

IsNavigationTarget은 기존의 View를 사용할지 신규 View를 사용할지 확인하는데,

아래 코드는 파라미터로 받은 객체와 LastName이 동일하면 기존 View를 사용하기 때문에

예제에서 다른 Item을 선택 후 원래 Item을 선택하면 기존 View로 돌아오게됩니다.

public bool IsNavigationTarget(NavigationContext navigationContext)
{
    var person = navigationContext.Parameters["person"] as Person;
    if (person != null)
        return SelectedPerson != null && SelectedPerson.LastName == person.LastName;
    else
        return true;
}

 

반응형