首页 > 其他分享 >Prism导航

Prism导航

时间:2023-06-26 09:04:23浏览次数:37  
标签:regionManager void 视图 person Prism 导航

通常,导航意味着某个Control被添加到UI中,与此同时另一个Control被移除。

简单跳转

  1. 新建 UserControl,新建ViewModel,VM需要实现 INavigationAware

  2. 注册 UserControl到DryIoc容器

containerRegistry.RegisterForNavigation<IndexView, IndexViewModel>();
  1. 在XAML中需要导航的地方声明Region
<ContentControl prism:RegionManager.RegionName="ContentRegion" />
  1. 在需要导航的地方(VM或后置代码中)注入 IRegionManager 并请求导航(关于 Prism 中的Region 可见我的另一篇随笔
public DelegateCommand<string> NavigateCommand { get; private set; }

public MainWindowViewModel(IRegionManager regionManager)
{
    _regionManager = regionManager;

    NavigateCommand = new DelegateCommand<string>(Navigate);
}

private void Navigate(string navigatePath)
{
    if (navigatePath != null)
        _regionManager.RequestNavigate("ContentRegion", navigatePath);
}

导航后执行回调

请求导航时可以添加一个回调方法用于导航成功后被使用

void RequestNavigate(
    string regionName,
    string source,
    Action<NavigationResult> navigationCallback
);

一个例子:

private void Navigate(string navigatePath)
{
    if (navigatePath != null)
    _regionManager.RequestNavigate("ContentRegion", navigatePath, NavigationComplete);
}

private void NavigationComplete(NavigationResult result)
{
    System.Windows.MessageBox.Show(String.Format("Navigation to {0} complete. ", result.Context.Uri));
}

被导航视图的复用

每个能够被导航的视图的VM都需要实现 INavigationAware 接口,接口中有一个 IsNavigationTarget 方法,它用于表明当前视图是否可以被导航复用,如果直接返回 true,那么导航时将总是使用同一个实例。

也可以根据条件返回 false 以使用新的VM实例。

被导航视图的生命周期

当导航到新的视图之后, 之前的视图就成了deactive状态。

可以通过实现 IRegionMemberLifetime 并重写 KeepAliveget 方法来自定义什么情况下销毁页面,使每次页面处于 deactivated 状态时 ViewModel 对象被销毁,再次导航到被销毁页面后重新创建新 ViewModel 对象。

public class ViewBViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
    public bool KeepAlive => false;
// ...

导航时携带参数

private void PersonSelected(Person person)
{
    var parameters = new NavigationParameters();
    parameters.Add("person", person);

    if (person != null)
        _regionManager.RequestNavigate("PersonDetailsRegion", "PersonDetail", parameters);
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
    var person = navigationContext.Parameters["person"] as Person;
    if (person != null)
        SelectedPerson = person;
}

TabControl与Prism导航

TabControl 中声明 RegionName ,在导航时会自动添加 TabPage

image

引用

  1. Prism Library: Navigation Using the Prism Library

标签:regionManager,void,视图,person,Prism,导航
From: https://www.cnblogs.com/bblitz/p/17502784.html

相关文章

  • 行行AI人才直播第3期:浙江大学周鑫博士《空中机器人复杂环境高效自主导航—从单机到集
    行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台。空中飞行的无人车、无人机集群是科幻电影的常客,也往往是未来科技的一大代表。在电影《星球大战:西斯的复仇》(2005)和《银翼杀手2049》(2017)中,飞车构成的密集空中交通有条不紊的运行于高楼大厦之间,俨然是高科......
  • 主流的跨境电商导航有哪些?
    在当今数字化时代,跨境电商越来越受到欢迎,尽管它仍然面临着许多挑战和难题。在这个方面,许多人可能会感到困惑,不知道应该如何开始这项业务。因此,选择一款好的跨境电商导航是十分必要的。首先,一个好的跨境电商导航必须具备以下两个特点:一、信息资源丰富一个好的跨境电商导航必须具备......
  • 其他——26电梯导航栏
    思路:主要思路就是对滑动事件进行监听。监听到当前滑动到的位置,然后判断当前所在的位置处于哪一块区域。给它addactive的类,当滑走当前区域,就会removeactive类。监听点击事件,其实跟css里的scroll-behavior差不多。点击导航,然后获取点击的href,然后获取要显示的区域的位置,然后......
  • 直播软件app开发,实现商城底部导航栏
    直播软件app开发,实现商城底部导航栏<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  xmlns:tools="......
  • "快速访问"(Quick Access)是 Windows 操作系统中一个常用的功能,它允许用户快速访问最近
    "快速访问"(QuickAccess)是Windows操作系统中一个常用的功能,它允许用户快速访问最近使用的文件和常用的文件夹。它在资源管理器中的左侧导航窗格中显示,并提供了便捷的方式来查找和打开文件。在Windows10中,"快速访问"默认显示用户最近访问的文件和常用的文件夹。它会根据用户......
  • 前端Vue自定义导航栏菜单 定制左侧导航菜单按钮 中部logo图标 右侧导航菜单按钮
    前端Vue自定义导航栏菜单定制左侧导航菜单按钮中部logo图标右侧导航菜单按钮,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13152效果图如下:cc-navHeader使用方法在page.json设置{"path":"pages/index/index","style":{"nav......
  • Prism进入视图时导航的三种方式
    Prism导航新建视图UserControl及其ViewModel,被跳转的视图的VM需要实现INavigationAware在App.xaml.cs中注册视图及其ViewModel//App.xaml.cscontainerRegistry.RegisterForNavigation<IndexView,IndexViewModel>();在需要放置导航内容处声明ContentControl及region......
  • iOS开发系列课程(05) --- 导航视图控制器
    简介  导航视图控制器是一个特殊的容器视图控制器,它可以维护有明确层次关系的视图之间的切换。我们可以打开模拟器或者你的iPhone看看设置功能,这里就是一个典型的对导航视图控制器的应用,如下图所示。很明显,导航视图控制器维护了一个栈结构,这是一种先进后出(FILO)的结构,我们将一个一......
  • 好用网址分享-77ai导航与77搜索导航
    AI(人工智能)技术正在改变我们的生活方式和工作方式,越来越多的人开始关注和使用AI相关的网站和应用程序。在这篇文章中,我将为大家介绍一些常用的AI网址导航,帮助您更好地了解和使用AI技术。AIHubAIHub是由GoogleCloud推出的一个开放平台,旨在帮助企业和开发者快速构建、部署和管......
  • Android 12 自定义底部导航栏
    1.修改配置文件 frameworks\base\packages\SystemUI\res\values\config.xml<!--Navbarbuttondefaultordering/layout--><stringname="config_navBarLayout"translatable="false">left[.5W];leftrotate,volume_sub,back,home,r......