如何从 xViewModel 访问 NavigationParameters?

How can I access NavigationParameters from the xViewModel?

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

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

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

获取导航参数 ID
public xViewModel(NavigationParameters navigationParameters)
{
   var id = (int)navigationParameters["id"];
}

我做错了什么?

您无法访问构造函数中的导航参数。您必须在视图模型中实现 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.
}

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

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