我想在多个项目中使用一组常用页面。因此,我想用这些页面构建一个类库。问题是我无法使用NavigationService.Navigate传递对象(新的Uri(" / Common; component / SomeName.xaml",UriKind.Relative));方法。
我知道我可以传递querystring。我想知道的是......
或者更好,
是否有更好的方法将对象从应用程序传递到另一个类库中的页面?
答案 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)
回答你的问题:
对于小项目,我通常只是将查询字符串传递给我的页面。对于更复杂的情况,我有一个共享的静态域类,两个库都引用。然后我可以很容易地静态访问这个变量。