首页 > 解决方案 > 如何从 xViewModel 访问 NavigationParameters?

问题描述

从第一个视图中,我使用以下代码导航到第二个 xView:

 var navigationParameters = new NavigationParameters{{ "id", 1 }};
 _regionManager.RequestNavigate(RegionNames.xRegion, new Uri("xView", UriKind.Relative), navigationParameters);

从构造函数中的 xViewModel 我尝试通过

public xViewModel(NavigationParameters navigationParameters)
{
   var id = (int)navigationParameters["id"];
}

我究竟做错了什么?

标签: c#wpfprism

解决方案


您无法访问构造函数中的导航参数。您必须在视图模型中实现INavigationAware接口。

public interface INavigationAware
{
    bool IsNavigationTarget(NavigationContext navigationContext);
    void OnNavigatedTo(NavigationContext navigationContext);
    void OnNavigatedFrom(NavigationContext navigationContext);
}

OnNavigatedTo方法由 Prism 的导航服务自动调用。它包含一个Parameters访问导航参数的属性,因此您可以这样做:

public void OnNavigatedTo(NavigationContext navigationContext)
{
   var id = navigationContext.Parameters.GetValue<int>("id");
   // ...other code.
}

您可以在 上使用GetValue<T>GetValues<T>方法NavigationParameters,因此您不必自己强制转换它们。

您可以在文档中阅读有关视图模型参与导航的更多信息。


推荐阅读