Prism中,页面跳转以及页面之间传递参数(NavigationParameters)

一、页面跳转概述

在Prism中,使用Navigation来进行页面之间的跳转通常需要一下几步:
1. 创建新页面,并且实现INavigationAware接口
2. 使用IRegionManager注册页面
3. 使用NavigationParameters封装页面跳转的参数
4. 使用IRegionManager.RequestNavigate()跳转到目标页面

二、例子

  1. 创建新页面,并且实现INavigationAware接口
    public partial class ContactMainWindowView : UserControl, INavigationAware
    {
        public ContactMainWindowView()
        {
            InitializeComponent();

        }

        #region  INavigationAware

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
        }


        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            var param = navigationContext.Parameters["Param"] ;
            Console.WriteLine(param?.ToString());
            return true;
        }



        public void OnNavigatedFrom(NavigationContext navigationContext)
        {

        }


        #endregion

    }
  1. 使用IRegionManager注册页面

ServiceLocator.Current.GetInstance<IRegionManager>()
.Regions[RegionNames.ContentRegion].Add(new ContactMainWindowView());
  1. 用NavigationParameters封装参数:

方法一:该方法参数类型可以为object

    var para = new NavigationParameters();
    para.Add("Uri", "ContactMainWindowView");//此处建议将ContactMainWindowView定义为常量
    para.Add("Param", "hello saylor");//key必须为字符串,value可以传递object类型,此处用"hello saylor"

方法二:该方法参数类型可以为string

    var para = new NavigationParameters("Uri=ContactMainWindowView&Param=hello saylor");
  1. 使用IRegionManager.RequestNavigate()跳转到目标页面
ServiceLocator.Current.GetInstance<IRegionManager>()
.RequestNavigate(RegionNames.ContentRegion, para["Uri"].ToString(), para);

三、总结

  1. 使用IRegionManager注册页面时,是new一个新页面(不要多次注册)。并且对应的region会默认显示第一个注册的View。
  2. 使用了ServiceLocator来获取IRegionManager的实例。prism中,默认创建了实例,并进行了注册(依赖注入)。
  3. 用NavigationParameters封装参数,方法二中,构造函数的参数类似于get请求中的参数形式。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Xamarin ,要在 `MainViewModel` 实现页面跳转,您可以使用步骤: 1. 首先,确保您已经安装了 `Xamarin.Forms` 和 `Prism`(如果使用 Prism 框架)的相关包。 2. 在 `MainViewModel` 创建一个 `INavigationService` 的属性,用于导航操作。示例如下: ```csharp using Prism.Navigation; public class MainViewModel : INotifyPropertyChanged { private readonly INavigationService _navigationService; public MainViewModel(INavigationService navigationService) { _navigationService = navigationService; } // 其他视图模型代码... private async Task NavigateToPage() { await _navigationService.NavigateAsync("YourPage"); } } ``` 3. 确保您已经在 App 的构造函注册了 `INavigationService`。示例如下: ```csharp using Prism; using Prism.Ioc; using Prism.Unity; using Xamarin.Forms; public partial class App : PrismApplication { public App(IPlatformInitializer initializer = null) : base(initializer) { } protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterForNavigation<YourPage, YourPageViewModel>(); // 其他页面和视图模型的注册... } protected override void OnInitialized() { InitializeComponent(); NavigationService.NavigateAsync("YourPage"); } } ``` 4. 然后,您可以在 `MainViewModel` 的方法或命令使用 `_navigationService` 来导航到其他页面。示例如下: ```csharp private async Task NavigateToPage() { await _navigationService.NavigateAsync("YourPage"); } ``` 这样,当您调用 `NavigateToPage` 方法时,将会导航到名为 "YourPage" 的页面。 请注意,上述示例假设您使用了 Prism 框架。如果您使用的是其他框架或没有使用任何框架,导航操作的实现可能会有所不同。因此,请根据您的具体情况进行相应的调整。 希望这能帮助到您。如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值