【问题标题】:How do I pass a variable to another Silverlight page?如何将变量传递到另一个 Silverlight 页面?
【发布时间】:2011-09-15 05:05:16
【问题描述】:

我的图钉有一个 OnClick 事件,如下所示。

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

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

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

【问题讨论】:

标签: c# silverlight windows-phone-7


【解决方案1】:

有多种方法可以实现这一点。

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

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

另一种方法是将其作为查询字符串参数传递,类似于您在上面的代码 sn-p 中所做的。在导航到的页面中,您可以通过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,但如果使用得当,可以提供一种在多个页面之间共享信息的快速简便的方法。

【讨论】:

  • App.Xaml 的方式听起来很有趣。我不熟悉这个。对代码示例有任何更改以帮助我吗?
  • 谢谢,我使用了导航方法,效果很好。谢谢
  • Rhys,更新了显示如何向 App.xaml.cs 添加值的答案
  • 谢谢你,很高兴知道。但是我选择了其他 NavigationContext 选项。
【解决方案2】:

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

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

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

View1 和 View2 应该引用会话服务。

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

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

【讨论】:

  • 谢谢,我刚刚阅读了有关模型视图视图模型的内容,但我仍在学习,所以目前它有点超出我的能力。
【解决方案3】:

您可以使用PhoneApplicationService。包括外壳命名空间。 using Microsoft.Phone.Shell;

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

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

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

【讨论】:

  • 这似乎不起作用appSer["busStopNumber"]=number; 无法使用 [] 表达式应用索引。对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2019-03-06
  • 2015-12-17
  • 1970-01-01
相关资源
最近更新 更多