我如何传递一个变量到另一个Silverlight页面

本文关键字:变量 另一个 Silverlight 页面 一个 何传递 | 更新日期: 2023-09-27 18:08:42

我有一个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,然后使用unimapping将其传递到第二页,但它似乎不起作用,我想有人可能有更好的选择

我已经看了类似的帖子,但是他们并没有完全回答我的问题。

我如何传递一个变量到另一个Silverlight页面

有多种方法可以做到这一点。

一种方法是在App.xaml.cs类中创建一个BustopNumber属性,在一个页面中设置它,然后在其他地方访问它。

这是我的首选方法,尽管您必须防止未设置值或值无效的情况。

另一种方法是将其作为查询字符串参数传递,类似于您在上面的代码片段中所做的。在导航到的页面中,您可以通过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;

显然,封装存在问题,因为这本质上是对全局的一种hack,但如果使用得当,可以提供一种快速简便的方法来跨多个页面共享信息。

方法之一是添加一个类,其中包含可以在视图之间共享的公共数据。这是一种方法,可能不是最好的。

你可以有一个静态类,它可以创建Session的单例,并将其作为User控件绑定的一部分提供给XAML。如果你愿意,会话类可以在将来增强多个属性。

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

View1和View2应该有Session Service的引用。

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

您应该开始研究MVVM模式来模块化您的代码,并避免将来出现任何此类问题。

你可以使用PhoneApplicationService。包括shell名称空间。using Microsoft.Phone.Shell;

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

,当您想要在另一个页面中使用它时,执行此操作(也在该页中初始化appSer)

if(appSer["busStopNumber"]!=null)
{ 
int number = (int)appSer["busStopNumber"];
}