티스토리 뷰

WindowsPhone

WP7 개발 기초 - 페이지간 데이터 공유

생각많은 소심남 2011. 12. 27. 13:50

지난 시간에는 페이지간 데이터 전송을 OnNavigateTo 메서드를 사용해서 전달되는 것을 확인할 수 있었습니다.

다만 문제점이 있었다면 secondpage에서 main page로 넘어갈 때 색이 검정색으로 고정이 되어버리는 것이었습니다.

그러면 계속 연속적으로 main에서 second로 넘어갈때나 second에서 main으로 넘어갈때에도 배경색을 넘겨받을 수는 없을까요?

혹시.. 배경색을 페이지끼리 공유할수는 없을까 하는 생각에서 나온 파트가 이 파트입니다.

기존 프로젝트를 그대로 가져와서 쓰고 solution 탐색기에 보시면 app.xaml 파일이 있습니다. 이걸 코드로 엽니다.


이 app.xaml은 app이 실행됨에 있어서 전반적인 동작을 관리하는 파일입니다. 프로그램이 동작이 되기 시작하면서 부터 꺼지기 전까지의 모든 과정이 묘사되어 있습니다.

지금 밑줄 쳐진 부분을 제외한 것들은 기존에 작성되어 있는 항목입니다. 지금 저렇게 작성하면서 application 내에서 색에 관한 항목을 공유할 수 있게끔 한겁니다. 책에 언급된 바로는 Color 형으로 속성이 설정되어 있는 이유에 대한 설명이 들어가 있는데 이는 검정색이 background색으로 지정되었을때 채도의 차이가 나타나는것( 즉 검정색에서 채도의 차이가 있는건 의미가 없겠지요?)을 방지하기 위함이라고 언급하고 있습니다.

기존 프로젝트와의 차이점이라면 페이지간 이동시 실행되는 핸들러가 이 app 클래스내에 색상으로 저장한다는 점입니다.
그래서 기본적인 코드를 수정하고자 합니다.


물론 전 프로젝트에선 destination으로 지정되어 있었지만 이번에는 페이지가 딱 한번 넘어갈때만 사용되기 때문에 다시 파일 표현 방식으로 바꿨고, 앞에서 언급한 것처럼 SolidColorBrush가 있을때 여기에 포함되어 있는 색상 정보가 app쪽으로 넘어가게 됩니다.

마찬가지로 SecondPage에서도 이부분을 수정해주어야 합니다.
우선 수정시 두가지를 고려해줘야 합니다. 일단 SecondPage에 있는 메서드중 화면전환시 실행되는 것은 OnNavigateTo와 TextBlock을 눌렀을때 전환되는 OnTextBlockManipulationStarted입니다.

우선 OnNavigateTo에서는 app.xaml에서 저장되어 있던 색 정보를 받아와야하고, 그 정보를 background에 뿌려줘야 합니다.
다음 TextBlock을 눌렀을 때도 역시 background 색을 저장해서 다시 app.xaml로 저장되어야 할 겁니다.

이에 대한 부분은 다음과 같이 해결 됩니다.

 
앞에서 말한것처럼 sharedColor가 app상에 있으면서 그 정보가 비어있지 않으면 SecondPage상의 BackGround로 입혀지게 됩니다.


또한 TextBlock을 눌렀을 때의 정보는 다시 app에 저장되게 됩니다. 참 여기서는 GoBack 메서드를 사용했기 때문에 back 버튼을 누를때의 효과가 그대로 나타납니다.

우선 이렇게 했으니까 다시 mainPage에서는 이 app에 저장되어 있는 정보를 다시 불러와야 합니다. 이에 대한 건 다시 MainPage.xaml.cs 내에 OnNavigateTo 메서드를 삽입해줘야 합니다. (기존 프로젝트에선 이 부분이 없었지요)


만들다 보니까 SecondPage의 OnNavigateTo 메서드와 MainPage가 같습니다. 어차피 해당 페이지의 .cs 파일내에만 있으면 그 페이지가 열릴때 실행되기 때문에 똑같게 되는거죠. 실행 결과는 다음과 같습니다.


보시다시피 페이지 전환이 되어도 이전 배경색이 유지되는 것을 확인할 수 있습니다.
다만 전전 포스팅에서 언급했던 것처럼 back 버튼을 누르게 되면 기존 프로젝트와 달리 stack에서 빠져나오는 구조를 띄기 때문에
second에서 main, main에서 메뉴로 나가는 과정을 거치게 됩니다.

지금까지 페이지간 데이터 공유시 app class에 데이터를 저장해서 모든 프로젝트내에서 전역적으로 불러오는 방법에 대해서 따라해보았습니다.

그런데 책에서는 app class 내에 저장하는 방법이 편하기는 하지만 단지 페이지 네비게이션을 할 때는 또다른 메서드를 사용해서 처리할 수 있다고 언급하고 있습니다. 이 부분에 대해서는 다음 포스팅에서 같이 해보겠습니다.

댓글