可移植类库:导航到xaml页面

时间:2013-03-20 14:02:51

标签: c# xaml mvvm navigation portable-class-library

我有一个包含3个项目的可移植类库。

  • 适用于Windows Phone和Windows平板电脑的常用课程项目
  • Windows Phone项目
  • 适用于Windows平板电脑的项目

在我的常见项目中,我有一个文件夹模型和一个文件夹视图模型。 在我的Windows Phone项目中,我有一个文件夹视图。

是否可以从公共项目的de viewmodel文件夹中的类导航到Windows Phone项目的视图文件夹中的xaml页面?

NavigationService.Navigate();在这里不起作用,我找不到任何nuget包来包含它。

所以我的问题是:

  • 还有其他方法可以导航到xaml页面吗?
  • 或者是否有一个nuget包在公共项目中添加NavigationService

4 个答案:

答案 0 :(得分:1)

PCL中没有NavigationService类。您可以通过查看documentation on MSDN并点击“其他版本”下拉列表来确认这一点。

您应该使用事件。比如说,您的viewmodel类可能有一个名为NavigationRequested的事件,您可以通过该事件调用而不是调用NavigationService.Navigate(),并且您的视图使用以下内容订阅该事件:

ViewModel.NavigationRequested += (s, e) => NavigationService.Navigate(GetUrlFor(e.PageId));

答案 1 :(得分:0)

我已经将http://azerdark.wordpress.com/2010/04/23/multi-page-application-in-wpf/用于多页的多个项目,它也可能对您有用,希望它有所帮助。

答案 2 :(得分:0)

以下是一个示例,其中详细说明了如何执行此操作:Sharing Code: Adding NavigationService

以下是有关使用可移植类库的更多一般信息的一些来源:

答案 3 :(得分:0)

在MvvmCross中,我们通过导航到ViewModel而不是View来进行此类导航。

以这种方式工作,框架拦截ViewModel导航并以特定于平台的方式解释它 - 例如:

  • 在WindowsPhone上,它使用Xaml网址
  • 在WindowsStore上使用导航服务
  • 在Android上它使用Intents

对于您自己的框架,您应该能够生成类似的抽象 - 只需让ViewModel启动导航到抽象的东西,然后让平台特定的代码处理每种情况下的细节。