티스토리 뷰

WindowsPhone

WP7 개발 기초 - 페이지간 데이터 전송

생각많은 소심남 2011. 12. 26. 13:05


지난 시간에는 눌렀을 때의 배경색이 일관성없게 막 변하는 걸 봤습니다.

그런데 그 배경색을 어느 조건일때 색을 초기화시킬 수는 없을까요?
또는 이전 페이지에서 받은 데이터를 다음 페이지에서도 그대로 이어받을 수는 없을까요?
당분간의 포스팅에선 이런 데이터에 대한 전송 공유 삽입에 대한 이야기를 해보고자 합니다.

거의 전에 있던 프로젝트를 변형해서 쓰는 것이기 때문에 수정이 가해질 부분은 데이터 처리쪽만 필요할 거 같네요.
우선 실버라이트로 SilverlightPassData라는 프로젝트는 만듭니다.
MainPage부분은 이전과 같습니다.

 



이전에 다뤘던 프로젝트에선 random 함수로 색상을 변화시킨 반면, 이번 프로젝트에선  ContentPanel내의 배경색이 SolidColorBrush를 가질때 해당이름을 색깔로 포멧하게 됩니다. navigate 메서드는 이전에 다뤘던 내용과 동일합니다.

지금 같이 background색이 SolidColorBlush로 된다면 해당 destination 변수는 다음과 같이 정의가 됩니다.

"/SecondPage.xaml?Red=244&Green=43&Blue=91"
이제 메인페이지에 대한 내용을 했으니 Second Page에 대한 부분도 고려해줘야 합니다. 역시 이전 프로젝트와 거의 유사합니다.


역시 중간에 TextBlock도 삽입합니다.


자 mainpage.cs에서 clr.R, clr.G, clr.B라고 정의가 되었으니 이 SecondPage에서도 이걸 변화시킬 무언가를 삽입해야 합니다.

우선 Page Navigation에 관한 메서드를 사용하기 위해서는 System.Windows.Navigation이란 이름의 네임스페이스를 추가해야 합니다.


그리고 다음과 같이 코딩을 해봅시다. 참 네임스페이스를 추가하지 않으면 아래와 같이 다써줘도 됩니다만 조금 귀찮겠지요.


조금 코드가 난해해보이지만 제가 이해한 내용은 다음과 같습니다.
우선 페이지 네비게이션이 실행되면서 NavigationContext에 관한 내용에 접근할 수가 있습니다. 거기에 속해있는 것들 중 QueryString에 저장되어있는 내용이 parameters 라는 변수로 정의됩니다. 그와중에는 각각 Red,Green,Blue에 저장되어있는 색 정보가 있는데 이를 각각 R,G,B라는 byte 단위에 parsing시키게 되는 거지요.

그러고 나서 다시 contentPanel의 배경색은 RGB에 저장되어 있는 값들로 재정의가 되는 겁니다.

여기에 조건문이 들어간건 하나의 가정을 한겁니다. 만약 색깔을 뽑아왔을때 Red에 관한 정보가 있으면 Green이나 Blue에 대한 정보도 반드시 있을거라는 가정말입니다. 모든 색상이 RGB 표현의 0에서 255 사이의 값을 가지니, 그 값을 넘어가는 수치는 안 찍는 이상 나올수가 없겠지요. 일일히 Green 값이 있느니 Blue값이 있느니 확인하는 것보다는 이런게 조금더 효율적인 것 같습니다.

아무튼 이렇게 실행한 결과는 다음과 같습니다.



보시면 MainPage에서 SecondPage로 넘어갈때 그 색상 정보가 그대로 유지되어 넘어가는 것을 확인할 수 있습니다.
반면 SecondPage에서 MainPage로 넘어갈 때는 다시 검정색으로 초기화되는 것까지 확인이 되네요.
이를 조금만 응용한다면 색상정보가 아니라 TextBox내에 들어간 데이터도 다른 페이지에서 받을 수 있겠지요.
조금만 더 생각해보면 가계부와 같은 앱을 만들때도 이렇게 받은 입력값을 출력받는다는게 가능할 수도 있겠습니다.

저도 조금더 고민해봐야겠습니다. 아무튼 이번시간에는 페이지간 데이터 전송에 대해서 해봤고 다음 포스팅에선 공유에 대한 이야기를 해보겠습니다.

댓글