Dalam membangun sebuah aplikasi mobile di dalam windows phone 7, kita seringkali harus mempassing nilai variable dari sebuah object dari application page satu ke application page yang lain. Misalnya saja untuk aktifitas autentikasi login yang harus mempassing data object user yang didapatkan dari halaman login ke halaman aplikasi utama kita. Salah satu cara yang dapat kita gunakan adalah dengan menggunakan page state. Page state merupakan salah satu fitur dari windows phone 7 yang dapat menyimpan state-state ketika adanya proses navigasi antar halaman atau aplikasi. Sebagai contoh dalam tulisan saya kali ini, saya akan menunjukkan bagaimana menyimpan isi dari variable string di dalam halaman satu ke dalam page state yang nantinya akan digunakan oleh halaman 2.
Pertama kita buat dua buah windows phone app page (MainPage dan Page2)
Pada MainPage.cs kita tambahkan variable appService yang digunakan untuk menangkap state yang aktif. Sebuah state dapat memiliki beberapa key state yang menyimpan object yang berbeda.
PhoneApplicationService appService = PhoneApplicationService.Current;Karena PhoneApplicationService merupakan class anggota dari Microsoft.Phone.Shell, maka jangan lupa untuk menambahkan using Microsoft.Phone.Shell; di atas class kita.Kita tambahkan event method yang digunakan untuk mengisi nilai dari key state pada saat page tersebut berpindah (perubahan navigasi halaman). Ada dua buah event method yang digunakan dalam perubahan navigasi, yaitu OnNavigatedFrom dan OnNavigatedTo. OnNavigatedFrom akan dipanggil pada saat halaman tersebut ditinggalkan sedangkan OnNavigatedTo akan dipanggil pada saat halaman tersebut dibuka. Karena halaman MainPage marupakan halaman yang nantinya akan berpindah, maka kita masukkan event method OnNavigatedFrom dengan tujuan untuk memasukkan nilai input text ke dalam page state.
1 protected override void OnNavigatedFrom(NavigationEventArgs args)“input” merupakan nama key yang akan kita gunakan, jadi apabila kita ingin mengambil data dari key state yang sudah diisi, kita dapat mengakses key state dengan nama “input” tersebut.
2 {
3 appService.State["input"] = tbInput.Text; ;
4 base.OnNavigatedFrom(args);
5 }
6
Jangan lupa untuk menambahkan using System.Windows.Navigation; karena NavigationEventArgs merupakan class anggota dari reference tersebut.
Pada Page2.cs, kita juga tambahkan variable appService yang digunakan untuk menangkap state yang telah berisi key dari halaman MainPage. Karena halaman Page2 merupakan halaman yang dipanggil, maka kita tambahkan event method OnNavigatedTo pada Page2.cs seperti di bawah ini
1 protected override void OnNavigatedTo(NavigationEventArgs args)Sebelum kita mengambil nilai dari key state “input”, kita cek terlebih dahulu apakah state pada appService tersebut mengandung key dengan nama “input”. Hal ini digunakan untuk mencegah error pada saat state tidak aktif atau key tidak ditemukan.
2 {
3 if (appService.State.ContainsKey("input"))
4 tbOutput.Text = (string)appService.State["input"];
5 base.OnNavigatedTo(args);
6 }
7
Isi dari MainPage.cs secara keseluruhan adalah :
1 ...
2 using Microsoft.Phone.Shell;
3 using System.Windows.Navigation;
4
5 namespace PageStateExample
6 {
7 public partial class MainPage : PhoneApplicationPage
8 {
9 PhoneApplicationService appService = PhoneApplicationService.Current;
10 string input;
11
12 // Constructor
13 public MainPage()
14 {
15 InitializeComponent();
16 }
17
18 private void button1_Click(object sender, RoutedEventArgs e)
19 {
20 NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.RelativeOrAbsolute));
21 }
22
23 protected override void OnNavigatedFrom(NavigationEventArgs args)
24 {
25 appService.State["input"] = tbInput.Text; ;
26
27 base.OnNavigatedFrom(args);
28 }
29
30 }
31 }
32
Isi dari Page2.cs adalah sebagai berikut :
1 ...
2 using System.Windows.Navigation;
3 using Microsoft.Phone.Shell;
4
5 namespace PageStateExample
6 {
7 public partial class Page2 : PhoneApplicationPage
8 {
9 PhoneApplicationService appService = PhoneApplicationService.Current;
10
11 public Page2()
12 {
13 InitializeComponent();
14 }
15
16 protected override void OnNavigatedTo(NavigationEventArgs args)
17 {
18 if (appService.State.ContainsKey("input"))
19 tbOutput.Text = (string)appService.State["input"];
20
21 base.OnNavigatedTo(args);
22 }
23 }
24 }
25
Hasilnya dapat kita lihat sebagai berikut :
Source code selengkapnya dapat didownload di sini.
Tidak ada komentar:
Posting Komentar