Parameters 如何在带有MVVMLight的通用应用程序Windows 8.1/WP 8.1上使用参数导航

Parameters 如何在带有MVVMLight的通用应用程序Windows 8.1/WP 8.1上使用参数导航,parameters,navigation,mvvm-light,win-universal-app,Parameters,Navigation,Mvvm Light,Win Universal App,我用MVVMLight开发了一个通用应用程序Windows 8.1/Windows Phone 8.1。 我想知道实现页面间导航的最佳实践是什么。 有以下几页: 主页:是一个登录页面 主页:是一个中心,有不同的部分“主题列表”、“联系人列表”、“用户详细信息” ListArticlesFromTheme:所选主题的文章列表 DetailsContact:所选联系人的详细信息 details文章:所选文章的详细信息 我需要通过从一个页面导航到另一个页面来传递参数:所选主题、所选联系人、所选文章

我用MVVMLight开发了一个通用应用程序Windows 8.1/Windows Phone 8.1。 我想知道实现页面间导航的最佳实践是什么。
有以下几页:

  • 主页:是一个登录页面
  • 主页:是一个中心,有不同的部分“主题列表”、“联系人列表”、“用户详细信息”
  • ListArticlesFromTheme:所选主题的文章列表
  • DetailsContact:所选联系人的详细信息
  • details文章:所选文章的详细信息
我需要通过从一个页面导航到另一个页面来传递参数:所选主题、所选联系人、所选文章,…

我找到了导航tavers MVVMLight v5的示例实现,但没有参数:
我找到了另一个带有参数的示例,但我还没有实现它:

  • 通过视图还是视图模型管理导航更好?
  • 是否有更详细的示例显示带参数的导航?
如果您想:

  • 访问在NavigationServiceEx.Navigate方法中传递的参数

  • 当页面被导航到时,在ViewModel中调用方法

Marco Minerva的这篇文章展示了如何连接到Frame_导航事件,该事件在vanilla NavigationServiceEx类中丢失

创建博客中描述的不可用界面:

public interface INavigable
{
    Task OnNavigatedToAsync(object parameter, NavigationMode mode);
    void OnNavigatingFrom(NavigatingCancelEventArgs e);
    void OnNavigatedFrom();
}
在NavigationServicesEx类中添加Frame.Navigating事件的处理程序(带有一些附加管道,请参阅博客),然后在ViewModels中实现不可用的接口

然后,您将能够访问在导航调用中传递的参数:

NavigationServiceEx.Navigate(typeof(DestinationPage).FullName, yourParameter);
在ViewModel中实现的OnNavigatedToAsync方法中:

public Task OnNavigatedToAsync(object parameter, NavigationMode mode)
{
    if (parameter != null)
    {
        YourThing thing = parameter as YourThing;
        this.UseYourThing(thing);
    }
    return Task.CompletedTask;
}
编辑:哦,在ViewModel中导航。您可以在VM中调用一个方法,该方法通过命令或视图的代码隐藏来处理导航