【问题标题】:How to navigate with parameters on an universal app Windows 8.1 / WP 8.1 with MVVMLight如何使用带有 MVVMLight 的通用应用程序 Windows 8.1 / WP 8.1 上的参数导航
【发布时间】:2015-01-13 16:59:58
【问题描述】:

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

  • MainPage:是一个登录页面
  • 主页:是一个包含“主题列表”、“联系人列表”、“用户详细信息”不同部分的中心
  • ListArticlesFromTheme:所选主题的文章列表
  • DetailsContact : 所选联系人的详细信息
  • DetailsArticle : 所选文章的详细信息

我需要通过从一个页面导航到另一个页面来传递参数:选定的主题、选定的联系人、选定的文章……

我找到了一个导航 tavers MVVMLight v5 的示例实现,但没有参数: navigationservice-in-mvvm-light-v5
我找到了另一个带有参数的示例,但我没有设法实现它:
navigating-to-a-new-page-from-the-view-model-in-windows-phone-8-1-universal-app

  • 通过 View 或 ViewModel 管理导航哪个更好?
  • 您有更详细的示例显示带参数的导航吗?

【问题讨论】:

    标签: parameters navigation mvvm-light win-universal-app


    【解决方案1】:

    如果你想:

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

    • 在导航到页面时调用 ViewModel 中的方法。

    Marco Minerva 的这个 blog 展示了如何挂钩到它从 vanilla NavigationServiceEx 类中丢失的 Frame_Navigating 事件。

    创建博客中描述的 INavigable 接口:

    public interface INavigable
    {
        Task OnNavigatedToAsync(object parameter, NavigationMode mode);
        void OnNavigatingFrom(NavigatingCancelEventArgs e);
        void OnNavigatedFrom();
    }
    

    在 NavigationServicesEx 类中为 Frame.Navigating 事件添加一个处理程序(带有一些额外的管道,请参阅博客),然后在您的 ViewModels 中实现 INavigable 接口。

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

    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 中调用一个方法来处理来自 Command 或 View 背后代码的导航。

    【讨论】:

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