【问题标题】:How to navigate to a page inside another class library in Windows Phone 7?如何导航到 Windows Phone 7 中另一个类库中的页面?
【发布时间】:2012-01-31 03:03:49
【问题描述】:

我想在多个项目中使用一组通用页面。因此,我想用这些页面构建一个类库。问题是我无法使用 NavigationService.Navigate(new Uri("/Common;component/SomeName.xaml", UriKind.Relative)); 传递对象方法。

我知道我可以传递查询字符串。我想知道的是……

  1. 您可以在查询字符串中传递的字符串数量是否有限制?
  2. 查询字符串有长度限制吗?

或者更好,

有没有更好的方法将对象从应用程序传递到不同类库中的页面?

【问题讨论】:

    标签: windows-phone-7


    【解决方案1】:

    关于“有没有更好的方法”这个问题。除了您提到的解决方案之外,有些人喜欢使用应用程序的状态在对象之间传递参数。例如:

    PhoneApplicationService.Current.State["parameter"] = param;
    var parameter = PhoneApplicationService.Current.State["parameter"];
    

    另一种选择是使用共享类。对于复杂的对象,我发现在可以从两个项目中访问的类中使用静态公共成员通常最容易。

    请注意,如果您选择使用查询字符串导航,查询字符串中的一些特殊字符可能会导致问题。如果您无法控制在页面之间传递的数据内容,共享类解决方案可能更适合您。例如,在我们的一个应用程序中,我们在查询字符串中传递了一个网站的名称。在某些情况下,这些名称可以包含“&”字符(如 H&M),如果包含,查询字符串将中断。

    导航时,如果构建查询字符串比较麻烦,您可以查看其中的 Caliburn.Micro 和 Uribuilder 类。它允许您使用相当不错(且流畅)的语法进行导航:

    navigation.UriFor<CandidateDetailsPageViewModel>()
         .WithParam(x => x.CandidateId, candidate.Id)                
         .Navigate();
    

    导航后,TryGetValue 方法在解析参数时会非常有用:

    String parameter;
    NavigationContext.QueryString.TryGetValue("Parameter", out parameter)
    

    有关 NavigationContext.QueryString 的更多详细信息,请访问 from MSDN.

    【讨论】:

    • 您可以使用 HTTPUtility.UrlEncode 或 Uri.EscapeDataString 使字符串在 QueryString 中安全使用
    【解决方案2】:

    回答您的问题:

    1. 不,您可以在 qyerystring 中传递的字符串数量没有限制
    2. 我相信这个问题的答案可能是肯定的。我相信标准是 url

    对于小项目,我通常只是将查询字符串传递给我的页面。对于更复杂的情况,我有一个两个库都引用的共享静态域类。然后我可以很容易地静态访问这个变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多