当前位置: 首页 > article >正文

WPF在MVVM模式下怎么实现导航功能

在mvvm的模式下wpf通过frame实现页面跳转_哔哩哔哩_bilibili

视频讲解同步可观看

如下图,我们要实现点击左侧的菜单,在右侧展示不同的页面

实现代码如下:

一、如何从主窗体跳转到页面。

1、在mainwindow.xaml的菜单栏代码里加入如下代码

  1.  <Border BorderBrush="#3c5254" BorderThickness="3">
  2.      <Button
  3.          Margin="0,3"
  4.          HorizontalAlignment="Stretch"
  5.          Background="#2f3366"
  6.          Command="{Binding NavigateToPageCommand}"
  7.          CommandParameter="Pages/DragPage.xaml"
  8.          Content="控件拖拉拽"
  9.          Cursor="Hand"
  10.          Foreground="White" />
  11.  </Border>

2、在mainwindows.xaml里添加一段代码里加一个导航容器,用于加载、显示和缓存页面,一般是page对像。

  1.  <Frame
  2.      Name="MainFrame"
  3.      Grid.Row="1"
  4.      NavigationUIVisibility="Visible" />

3、在MainWindows.xaml.cs隐藏代码里做如下处理,把2中的frame通过构造函数的方式传到viewmodel中,这段代码放到默认构造函数中

  1.  DataContext = new MainWindowViewModel(this.MainFrame);
  2.  //注册页面加载完成事件
  3.  this.Loaded += MainWindow_Loaded;

4、实现主页面加载方法。

  1.  private void MainWindow_Loaded(object sender, RoutedEventArgs e)
  2.  {
  3.      //在页面加载完成之后跳转到Pages/MainPage.xaml
  4.      MainFrame.Navigate(new Uri("Pages/MainPage.xaml", UriKind.Relative));
  5.  }

6、在viewmodel中实现通过构造函数接收Frame

  1.    public MainWindowViewModel(Frame frame)
  2.    {
  3.        _frame = frame;
  4.    }

7、实现通用的页面跳转方法

  1.     private ICommand _navigateToPageCommand;
  2.     public ICommand NavigateToPageCommand
  3.     {
  4.         get
  5.         {
  6.             return _navigateToPageCommand ?? new RelayCommand(NavigateToPage,null);
  7.         }
  8.     }
  9.     private void NavigateToPage(object? page)
  10.     {
  11.         try
  12.         {
  13.             string pageUri = page as string;
  14.             if (pageUri != null)
  15.                 _frame.Navigate(new Uri(pageUri, UriKind.Relative));
  16.         }
  17.         catch (Exception ex)
  18.         {
  19.         }
  20.       
  21.     }


http://www.kler.cn/a/388096.html

相关文章:

  • 事件循环 -- 资源总结(浏览器进程模型、事件循环机制、练习题)
  • Chrome使用IE内核
  • SpringBoot(八)使用AES库对字符串进行加密解密
  • hadoop大数据平台
  • wafw00f源码详细解析
  • 《EasyQuotation 与MongoDB在股市信息的奇妙融合》
  • 【SpringBoot】ThreadLocal线程空间上下文使用
  • Linux:版本控制器git的简单使用+gdb/cgdb调试器的使用
  • 【国内中间件厂商排名及四大中间件对比分析】
  • MySQL 程序设计课程复习大纲
  • Spring面向切面编程
  • 第4章 分离数据和指令-Claude开发应用教程
  • 2024最新软件测试面试热点问题
  • Oh My Posh安装
  • 07 P1164 小A点菜
  • Docker在CentOS上的安装与配置
  • 初识Electron 进程通信
  • PGMP-串串01概述
  • 数据分析:微生物功能差异分析之Maaslin2
  • 5分钟科普:AI网关是什么?应用场景是什么?有没有开源的选择?
  • 【JAVA】java 企业微信信息推送
  • 8+ 典型分析场景,25+ 标杆案例,Apache Doris 和 SelectDB 精选案例集(2024版)电子版上线
  • Python酷库之旅-第三方库Pandas(204)
  • layui 文件上传前检查文件大小,后面再点上传出现重复提交的问题
  • 【图】图学习
  • 20241106软考架构-------软考案例12答案