Как передать переменную на другую страницу Silverlight? - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть событие OnClick для моих кнопок, как показано ниже.

void BusStop1061_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show("Buses from this station: City Link");
}

Я бы хотел передать номер бустопа на другую страницу и в int "PassedVariable"

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    string site = "http://www.sourceDomain?stop=" + PassedVariable;
    webBrowser1.Navigate(new Uri(site, UriKind.Absolute));

}

Я думал создать константу int на первой странице, а затем передать ее на страницу 2 с помощью urimapping, но, похоже, это не сработало, и я подумал, что у кого-то может быть лучший вариант

Я просматривал похожие посты, но они не совсем отвечают на мой вопрос.

Ответы [ 3 ]

1 голос
/ 15 сентября 2011

Один из подходов заключается в добавлении класса с общими данными, которые могут быть разделены между представлениями.Это один из способов и, возможно, не самый лучший.

У вас может быть статический класс, который может создавать синглтон Session и предоставлять его XAML как часть привязки пользовательского элемента управления.Класс сессий может быть расширен в будущем с помощью нескольких свойств.

    View1    View2
     ^         ^
     |         |
     |         |
     v         v
   Session Service (stores user selection)

View1 и View2 должны иметь ссылку на Session Service.

public class Session
{
  public int BusStop {get; set;}
}

Вы должны начать смотреть на шаблон MVVM, чтобы модулировать ваш код и избежать подобных проблем в будущем.

1 голос
/ 15 сентября 2011

Для этого есть несколько способов.

Один из способов - создать свойство BustopNumber в классе App.xaml.cs, установить его на одной странице и получить к нему доступ в другом месте.

Это мой предпочтительный подход, хотя вы должны остерегаться случая, когда значение не установлено или недопустимо.

Другой подход - передать его как параметр строки запроса, аналогично тому, чтоВы делаете в своем фрагменте кода выше.При переходе на страницу вы можете получить доступ к параметру строки запроса через объект NavigationContext и искать по имени.

Изменить, чтобы добавить:

public partial class App : Application
{
    public static int BusStopNumber { get; set;}
}

//And in your application you can access it like so:
App.BusStopNumber = 10;

Очевидно, что есть проблемы с инкапсуляцией, поскольку это, по сути, хак для всего мира, но при аккуратном использовании может предложить быстрый и простой способ обмена информацией между несколькими страницами.

0 голосов
/ 15 сентября 2011

вы можете использовать PhoneApplicationService. включите пространство имен оболочки. using Microsoft.Phone.Shell;

PhoneApplicationService appSer = PhoneApplicationService.Current;
appSer["busStopNumber"]=number;

и если вы хотите использовать его уже на другой странице, сделайте это (инициализируйте appSer также на странице)

if(appSer["busStopNumber"]!=null)
{ 
int number = (int)appSer["busStopNumber"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...