如何导航到Windows Phone 7中另一个类库中的页面?

时间:2012-01-31 03:03:49

标签: windows-phone-7

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

我知道我可以传递querystring。我想知道的是......

  1. 您可以在查询字符串中传递的字符串数量有限制吗?
  2. 查询字符串有长度限制吗?
  3. 或者更好,

    是否有更好的方法将对象从应用程序传递到另一个类库中的页面?

2 个答案:

答案 0 :(得分:1)

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

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

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

请注意,如果您选择使用查询字符串导航,查询字符串中的某些特殊字符可能会导致问题。如果您无法控制页面之间传递的数据内容,则共享类-solution可能更适合您。例如,在我们的一个应用程序中,我们在查询字符串中传递了一个网站的名称。在某些情况下,这些名称可以包含'&' -character(如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.

答案 1 :(得分:0)

回答你的问题:

  1. 没有限制你可以在qyerystring中传递的字符串数量
  2. 我相信答案可能是肯定的。我相信标准是有一个&lt; 2000个字符
  3. 对于小项目,我通常只是将查询字符串传递给我的页面。对于更复杂的情况,我有一个共享的静态域类,两个库都引用。然后我可以很容易地静态访问这个变量。