如何从 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 中阅读有关视图模型参与导航的更多信息。
我使用以下代码从第一个视图导航到第二个 xView:
var navigationParameters = new NavigationParameters{{ "id", 1 }};
_regionManager.RequestNavigate(RegionNames.xRegion, new Uri("xView", UriKind.Relative), navigationParameters);
从构造函数中的 xViewModel 我尝试通过
获取导航参数 IDpublic 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 中阅读有关视图模型参与导航的更多信息。