Prism中使用INavigationAware进行页面切换的时候,需要实现IsNavigationTarget、 OnNavigatedFrom、OnNavigatedTo这三个方法,具体如下:
region INavigationAware接口方法
public bool IsNavigationTarget(NavigationContext navigationContext)
{
//是否允许重复导航进来
//返回True,则显示已实例化的页面,若无则创建
//返回false,则创建新的页面实例
return true;
}
// INavigationAware
public void OnNavigatedFrom(NavigationContext navigationContext)
{
// 从当前View导航出去的时候触发
// 在此可通过NavigationContext封装需要传递的参数
}
// INavigationAware
public void OnNavigatedTo(NavigationContext navigationContext)
{
// 打开当前View的时候触发
// 在此可通过NavigationContext解析传递过来的参数
}
endregion
OnNavigatedFrom和OnNavigatedTo分别是离开和到达当前ViewModel所对应的View页面时触发的方法,可以封装和解析传递的参数。
但是有个bug:就是在当前的ViewModel中,通过_regionManager.RequestNavigate("RegionName", "ViewName")方法进行页面切换时,若目标"ViewName"对应的页面没有或者没有实现INavigationAware的ViewNameViewModel,则_regionManager.RequestNavigate("RegionName", "ViewName")会触发当前ViewModel中的OnNavigatedTo方法;若有了实现INavigationAware的ViewNameViewModel,则会触发其中的OnNavigationTo方法。
OnNavigatedFrom方法同理,在当前的ViewModel中,通过_regionManager.RequestNavigate("RegionName", "ViewName")方法进行页面切换时,若从没有或没有实现INavigationAware的ViewNameViewModel对应的View切换至当前View时,则会触发当前ViewModel中的OnNavigatedFrom方法。
特此记录。