2016-02-10 13 views
14

Próbuję przenieść niektóre projekty Windows Phone 8 do bieżącego UWP i utknąłem w tym kodzie fragmentu, którego użyłem w starym projekcie.Przekaż niektóre parametry między stronami w UWP

private void Restaurant_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     string types = "restaurant"; 
     string title = "restaurant"; 
     string url = string.Format("/NearbyPlaces.xaml?latitude={0}&longitude={1}&types={2}&title={3}", LocationLatitude.Text, LocationLangitude.Text, types, title); 
     NavigationService.Navigate(new Uri(url, UriKind.Relative)); 

    } 

W tym kodzie użyłem NavigationService do przekazania niektórych parametrów do innej strony. Nie mogłem już używać usługi NaigationService, ponieważ UWP jej nie obsługuje. Próbowałem używać tego w moim projekcie UWP, ale myślę, że to tylko obsługiwane dla przekazywania jednego parametru, CMIIW.

private void restaurant_tapped(object sender, TappedRoutedEventArgs e) 
    { 
     string types = "restaurant"; 
     string title = "restaurant"; 
     Frame.Navigate(typeof(placeResult), latLoc.Text, longLoc.Text, types, title); 
    } 

Ten kod daje mi błąd, ponieważ wymaga 5 argumentów, co stanowi +2 przeciążenie. Moje pytanie brzmi: jak w odpowiedni sposób przekazać niektóre parametry w projekcie UWP?

Odpowiedz

25

To, co przekazałeś w Windows (Phone) 8, było po prostu prostym string, które zawierało wszystkie twoje parametry. Trzeba było przeanalizować je metodą OnNavigatedTo() swojej strony docelowej. Oczywiście nadal możesz to zrobić i przekazać ciąg znaków do metody Frame.Navigate().

Ale od UWP można przekazywać kompletne obiekty do innych stron. Dlaczego więc nie stworzysz małej klasy, która zawiera wszystkie twoje parametry i przekaże instancję tego?

Twoja klasa mogłaby wyglądać następująco:

public class RestaurantParams 
{ 
    public string Name { get; set; } 
    public string Text { get; set; } 
    // ... 
} 

a następnie przekazać ją poprzez:

var parameters = new RestaurantParams(); 
parameters.Name = "Lorem ipsum"; 
parameters.Text = "Dolor sit amet."; 
// ... 

Frame.Navigate(typeof(PageTwo), parameters); 

Na następnej stronie można teraz uzyskać do nich dostęp poprzez:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 

    var parameters = (RestaurantParams)e.Parameter; 

    // parameters.Name 
    // parameters.Text 
    // ... 
} 

Gdzie parametryczny jest funkcją, która pobiera argumenty.

Nadzieję, że pomaga.

+0

Dziękuję. Działa to świetnie dla mnie – hamdanjz4

+0

Próbowałem powyższe w projektach UWP to daje mi błąd Twój parametr musi być możliwy do serializacji. Jeśli nie, użyj SessionState. Nie wiem, jak to naprawić. – Yosem

+0

Oznacza to, że przekazane parametry nie mogą zostać przekonwertowane na ciąg w tle. Czy możesz pokazać nam parametry, które przekazujesz? –

Powiązane problemy