BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Przekazywanie danych między stronami w Windows Phone

26-06-2013 09:32 | ILikeThis
Często przechodząc między stronami aplikacji potrzebujemy przesłać miedzy nimi jakieś dane. W Windows Phone mamy do dyspozycji 3 różne sposoby aby dokonać tego szybko i wygodnie.

W Windows Phone mamy trzy główne metody przekazywania danych między stronami, są to:

  1. QueryString
  2. Zmienne globalne
  3. Słownik State

W tym artykule zostaną kolejno omówione wszystkie trzy, wraz z przykładowymi kodami użycia.

QueryString podobnie jak w przypadku stron internetowych pozwala przekazywać dane w postaci łańcuchów znaków.
Po adresie strony stawiamy znak "?" (pytajnika) a następnie nazwę parametru oraz przypisaną do niego wartość. W przypadku gdy chcemy przesłać większą ilość parametrów to oddzielamy je znakiem "&" (ampersand).

Przykładowo jeśli chcemy przesłać do strony Page2.xaml nazwę użytkownika i jego id to wykorzystując querystring zrobimy to tak:

NavigationService.Navigate(new Uri("/Page2.xaml?username=Tomek&id=1", UriKind.Relative));

Do odczytu przekazanych przez querystring parametrów na drugiej stronie (w naszym przypadku będzie to Page2.xaml) służy obiekt NavigationContext.QueryString.
Najlepszym miejscem na odczytanie przesłanych danych jest zdarzenie załadowania strony:

private void PhoneApplicationPage2_Loaded(object sender, RoutedEventArgs e)
{
 ... 
}


Wewnątrz tego zdarzenia najpierw sprawdzamy czy parametr który chcemy odczytać został przesłany i dopiero go pobieramy, w tym celu piszemy:

string userName;
if(NavigationContext.QueryString.ContainsKey("username"))
{
  userName = NavigationContext.QueryString["username"];
}


lub

string userName;
if (NavigationContext.QueryString.TryGetValue("username", out userName))
{
  this.textBlock1.Text = userName;
}

Korzystając z QueryString nie można przekazywać złożonych typów, a maksymalna długość nie może przekroczyć 65.519 znaków.

 

Zmienne globalne definiujemy jako publiczne w klasie Application w pliku App.xaml.cs, dzięki czemu zmienne te są widoczne we wszystkich stronach aplikacji.

Aby uzyskać dostęp do tego pola ze strony musimy najpierw pobrać obiekt Application, a dopiero z tego obiektu mamy dostęp do naszej zmiennej globalnej.

App myApp = Application.Current as App;
MessageBox.Show(myApp.user.name);
myApp.user.age = 20; //myApp.user = new User();

Zmienne globalne pozwalają przekazywać między stronami różne złożone obiekty.

 

Trzecim sposobem przekazywania danych między stronami jest słownik aplikacji.
Słownik dostępny jest przez:

using Microsoft.Phone.Shell
PhoneApplicationService.Current.State

Należy zwrócić uwagę aby nie pomylić tego słownika ze słownikiem strony!
Zapis do słownika jest bardzo prosty i wygląda tak:

PhoneApplicationService.Current.State["id"] = 1;
User newUser = new User(){name = "Tom", age = 20};
PhoneApplicationService.Current.State["user"] = newUser;

Odczyt natomiast jest podobny jak w przypadku odczytu parametrów przekazanych przez QueryString:

object o;
User u;
if (PhoneApplicationService.Current.State.TryGetValue("user", out o))
{
  u = o as User;
}

Samego natomiast sprawdzenia czy element "user" istnieje w słowniku możemy dokonać za pomocą metody ContainsKey:

PhoneApplicationService.Current.State.ContainsKey("user");

State pozwala przechowywać różne typy danych nawet o skomplikowanej strukturze. Wymagane jest jednak aby dane te dały się serializować.

W poście tym zostały omówione 3 różne metody przekazywania danych między stronami w Windows Phone, oraz zademonstrowane sposoby ich użycia. Wszystkie sposoby są proste, intuicyjne i szybkie w użyciu.

Podobne artykuły

Komentarze 2

Pawelmw
Pawelmw
242 pkt.
Junior
24-01-2014
oceń pozytywnie 0
W pierwszym fragmencie kodu jest błąd. Na końcu tego fragmentu powinnio być UriKind.Relative zamiast Uri.Relative
Marcin Iwanowski Redaktor
Marcin Iwanowski
2702 pkt.
Guru
MVP
10-02-2014
oceń pozytywnie 0
Faktycznie był błąd, dziękuję za zwrócenie uwagi :)
pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.