Передайте некоторые параметры между страницами в UWP
Я пытаюсь перенести некоторые проекты Windows Phone 8 на текущий 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));
}
В этом коде я использовал NavigationService для передачи некоторых параметров на другую страницу. Я больше не мог использовать NaigationService, потому что UWP не поддерживает его. Я попытался использовать это в своем проекте UWP, но я думаю, что он поддерживает только один параметр, 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);
}
Этот код дает мне ошибку, потому что он принимает 5 аргументов, что составляет +2 перегрузки. Мой вопрос заключается в том, как сделать надлежащим образом передачу некоторых параметров в проекте UWP?
Ответы
Ответ 1
То, что вы передали в Windows (Phone) 8, просто было простым string
, которое включало все ваши параметры. Вы должны были проанализировать их в методе OnNavigatedTo()
целевой страницы. Конечно, вы все равно можете это сделать и передать строку методу Frame.Navigate()
.
Но поскольку UWP вы можете передавать полные объекты на другие страницы. Итак, почему бы вам не создать небольшой класс, который включает все ваши параметры и передать экземпляр этого?
Ваш класс может выглядеть так:
public class RestaurantParams
{
public string Name { get; set; }
public string Text { get; set; }
// ...
}
И затем передайте его через:
var parameters = new RestaurantParams();
parameters.Name = "Lorem ipsum";
parameters.Text = "Dolor sit amet.";
// ...
Frame.Navigate(typeof(PageTwo), parameters);
На следующей странице вы можете получить к ним доступ через:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var parameters = (RestaurantParams)e.Parameter;
// parameters.Name
// parameters.Text
// ...
}
Где параметр - это функция, которая извлекает аргументы.
Надеюсь, что это поможет.