WPF(C#)学习日志5:Prism框架2-导航

1.导航的作用

导航是指在应用程序中在不同的视图(页面)之间进行切换的过程。Prism 提供了一套强大的导航机制,用于管理视图之间的导航流程。Prism 提供了导航服务,它是一个用于管理导航的中心化机制。开发人员可以使用导航服务来请求导航到不同的视图。导航服务负责管理导航历史、处理导航请求并在需要时触发视图的加载和卸载。

大多是应用程序都带有导航功能,直观的示例如下图所示

2.导航的基础操作

创建一个导航至少需要有两个用户控件,分别是控制导航的窗体和导航转跳到的内容,而Prism是基于MVVM的。因此需要写四个文件来创建导航。弹窗在prism架构中有封装的api

Prism框架有默认的导航区域生命字段,在XAML中如下,如此声明后,需要在VM层实现"ContentRegion" 方法

<ContentControl Grid.Column="1" prism:RegionManager.RegionName="ContentRegion" Grid.ColumnSpan="1"/>

首先需要构造函数中有相关的声明,构造函数可以选择多个参数,这里不考虑弹窗,暂时写一个,之后我们实现导航按键的回调方法Open。

private readonly IRegionManager regionManager;
        
public DelegateCommand<string> OpenCommand { get; private set; }
        
public MainWindowViewModel(IRegionManager regionManager)
{
     OpenCommand = new DelegateCommand<string>(Open);
     this.regionManager = regionManager;
}
      
private void Open(string obj)
{
     regionManager.Regions["ContentRegion"].RequestNavigate(obj);

}

然后,我们需要修改转跳到的页面,Prism中要求以用户控件的形式。

 设定为转跳的页面必须另VM层从基类派生

public class ViewAViewModel : RegionViewModelBase

修改XAML内容,方便我们验证导航的效果,这里假设转跳到的内容为ViewB

<UserControl x:Class="FullApp1.Views.ViewB"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:FullApp1.Views"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid>
        <TextBlock Text="我是模块B" FontSize="60"></TextBlock>
    </Grid>
</UserControl>

最后实现主窗体中的控制按键,分别向导航绑定的回调函数中传参。

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>


        <StackPanel Orientation="Vertical" Grid.Column="0">
            <Button Content="打开模块A" Style="{StaticResource MyButton}" CommandParameter="ViewAA"/>
            <Button Content="打开模块B" Style="{StaticResource MyButton}" CommandParameter="ViewB"/>
            <Button Content="打开模块C" Style="{StaticResource MyButton}" CommandParameter="ViewC"/>
        </StackPanel>

        <ContentControl Grid.Column="1" prism:RegionManager.RegionName="ContentRegion"/>
</Grid>

启动项目,导航功能的测试如同所示:

3.设置默认导航

Prism项目模板会为模块配置默认导航,更改OnInitialized中的函数参数即可改变进入的页面。

 public void OnInitialized(IContainerProvider containerProvider)
        {
            //设置默认的导航
            _regionManager.RequestNavigate(RegionNames.ContentRegion, "ViewA");
        }

4.导航日志

Prism的导航带有类似于浏览器的日志功能,目前的项目还不需要这个功能,因此没有学习和记录,后续使用时会补充。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值