CLOSE SEARCH

NavigationService를 통한 페이지 이동 및 데이터 공유

윈도우폰 7에서는 NavigationService를 통해 페이지 이동을 제공한다. NavigationService의 Navigate 함수에 이동하려는 xaml 파일 대한 Uri 객체를 넘겨주면 해당 페이지로 이동한다.

예를 들어, 메인페이지에서 서브페이지로 이동하는 버튼의 Click 이벤트에 onGoToSubpage가 연결되어 있다면 이 함수의 내용은 아래와 같을 것이다.

그리고 서브페이지에서 메인페이지로 돌아오는 동작을 하는 버튼의 이벤트 함수는 아래와 같을 것이다.


CanGoBack 속성을 통해 이전 화면으로 이동가능한지 판별한 후 GoBack() 함수를 통해 이전화면으로 이동한다. 이와 비슷하게 CanGoForward 속성과 GoForward() 함수를 통해 앞선 화면(네비게이션 히스토리(Forward navigation history) 상의 가장 최근 엔트리)으로 이동할 수도 있다.

또한 CurrentSoure 속성과 Source 속성을 통해 현재 표시중인 화면이나 새롭게 이동할 화면에 대한 Uri정보에 접근할 수 있다.

Refresh() 함수를 통해 현재 화면을 다시 읽는 기능과 StopLoading() 함수를 통해 화면 로딩을 중지하는 기능도 제공한다.

 

NavigationService 에서 제공하는 이벤트는 다음과 같다.

  • FragmentNavigation: 컨텐츠 조각을 탐색하기 시작할 때 발생한다. 원하는 조각이 현재 컨텐츠에 있는 경우 즉시 발생하고, 다른 콘텐츠에 있다면 해당 콘텐츠가 로드된 후에 발생한다.
  • LoadCompleted : 탐색할 컨텐츠의 로드 및 파싱 작업이 완료되고 렌더링이 시작될 때 발생한다.
  • Navigated : 탐색 대상 컨텐츠를 찾았고, 아직 모두 로드되지는 않았지만 Content 속성을 통해 컨텐츠를 사용할 수 있는 경우에 발생한다.
  • Navigating : 새로운 탬색이 요청될 때 발생한다.
  • NavigationFailed : 요청된 컨텐츠를 탐색하는 동안 오류가 있는 경우 발생한다.
  • NavigationProgress : 다운로드 중인 경우 진행률 정보를 제공하기 위해 주기적으로 발생한다.
  • NavigationStopped : StopLoading() 함수가 호출되었거나 현재 탐색이 진행되는 동안 새로운 탐색을 요청할 때 발생한다.

– 쿼리스트링 방식으로 데이터 보내기

Navigate() 함수에 전달하는 화면의 Uri에 쿼리스트링 형태의 문자열을 추가해서 대상 화면으로 데이터를 보낼 수 있다.

이렇게 전달된 파라미터는 NavigationContext의 QueryString 속성을 통해 접근할 수 있다. 이 속성은 키와 값의 쌍을 딕셔너리 형태로 제공한다. 아래의 코드는 쿼리스트링 정보로부터 name 데이터를 읽어와 TextBlock 엘리먼트에 표시하는 예제이다.

 

– PhoneApplicationService를 통한 앱 전역 데이터 읽기/저장

PhoneApplicationService의 인스턴스는 App.xaml에서 생성되며 PhoneApplicationService.Current 정적 속성을 통해 코드에서 접근할 수 있다.

PhoneApplicationService는 State라는 IDictionary<string, object> 형식의 속성을 가지고 있는데, 이 속성을 통해서 앱 전역으로 사용할 수 있는 키/값 형태의 데이터를 읽고 쓸 수 있다.

위에서 저장한 newValue가 string 형이라면, 이 값을 읽는 코드는 아래와 같다. 먼저 “key”라는 이름을 가진 키가 있는지 확인하고 그 값을 적절한 형식으로 형변환하여 읽는다.

위와 같은 방식으로 저장된 데이터는 프로그램이 실행중인 경우에만 유지되며 사용자가 프로그램을 종료하는 경우 혹은 톰스토닝이 발생한 경우 사라진다. 그러므로 프로그램이 실행중인 동안 앱에서 전역적으로 공유할 데이터를 저장하는 용도로 사용된다.

Filed under: Windows & Windows Phone