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

WPF-Prism学习笔记之 “导航功能和依赖注入“

新建空白模板(Prism)

新建好后会有自动创建ViewModels和Views

在"MainWindow.xaml"文件里面标题去绑定了一个属性"Title",而"MainWindowViewModel.cs"里面继承一个非常重要的"BindbleBase"(prism框架里面非常重要的)。所以我们直接运行界面就会显示Title的文字信息

往下看

在"MainWindow.xaml"文件里面还有这样一段内容,这里就表示

你定义了一个名字叫 ContentRegion 的区域,后边你注册的界面就会绘制到这个区域。

 <Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions><ContentControl Grid.Row="1" Grid.Column="1" prism:RegionManager.RegionName="ContentRegion" /></Grid>

稍微添修改一下把界面Grid分成2行2列,并且把定义的区域放在 第二行二列里面(Grid.Row="1" Grid.Column="1" )

     private string _title = "Prism Application";public string Title{get { return _title; }set { SetProperty(ref _title, value); }}private readonly IRegionManager _regionManager;public DelegateCommand<string> DelegateCommand_Open { get; private set; }public MainWindowViewModel(IRegionManager contentRegion){_regionManager = contentRegion;DelegateCommand_Open = new DelegateCommand<string>(OPen);}private void OPen(string obj){// viewName 可能是 "HomeView", "SettingsView", "AboutView" 等if (!string.IsNullOrEmpty(obj)){// 导航到 ContentRegion 中指定的视图_regionManager.RequestNavigate("ContentRegion", obj);}}

而"MainWindowViewModel.cs"里面我们定义了一个 DelegateCommand<string> DelegateCommand_Open 可以接收一个 string 参数的命令。斌且在构造函数里面 引入一个接口IRegionManager contentRegion 是为了拿到我们通过接口注入的东西。

我这里定义了一个用户控件,并且在界面上面放了一个,TEXT方便显示效果

在APP.XML.CS里面我加了这样一个注入 这样就代表我们手动绑定 Form_1 和上下文 MainWindowViewModel 这里要解释一下为什么手动绑定这个 因为之前我们在MainWindowViewModel 里面的构造函数里面绑定了下面两个 我们注册的regionManager 就可以通过接口拿到

public MainWindowViewModel(IRegionManager contentRegion){_regionManager = contentRegion;DelegateCommand_Open = new DelegateCommand<string>(OPen);}

再通过  _regionManager.RequestNavigate("ContentRegion", obj); 去绘制到ContentRegion指定的区域 绘制的内容是通过我们注册的名称 也就是 Form_1

我们去给绑定一下

这样就实现了点击按钮就会把参数传入到 binding绑定的方法里面  我们binding绑定的是open方法

也就是我们把Form_1 传入到了Open方法里面然后通过 _regionManager.RequestNavigate("ContentRegion", obj);向指定区域中导航一个视图

点击按钮运行效果

我们看到的这种也是通过基础的导航绑定注册来实现的

英语比较差记一下:

 IRegionManager :“通过引入这个接口可以拿到我们在 App.xaml.cs 里面注册的窗体

DelegateCommand: 给XML界面提供属性绑定的 这个命令去绑定一个方法,按钮或者其他触发后就会去调用这个命令所绑定的方法可以带参数.

 regionManager.RequestNavigate:向指定区域中导航一个视图,它告诉 Prism:“请把某个已经注册的视图加载进这个区域中

   <ContentControl  prism:RegionManager.RegionName="ContentRegion"/>:我们在界面上放置了一个区域,名字叫 ContentRegion

http://www.xdnf.cn/news/9722.html

相关文章:

  • React 微应用接入:qiankun 深度集成实战
  • 如何在 Ubuntu 24.04 服务器上安装 Apache Solr
  • AugmentFree:解除 AugmentCode 限制的终极方案 如何快速清理vscode和AugmentCode缓存—windows端
  • 安科瑞Acrelcloud-6200系统:智慧路灯安全用电监控平台架构解析
  • 【Linux网络编程】传输层协议TCP,UDP
  • Nginx详解(三):ngx_http_rewrite_module模块核心指令详解
  • A2A Samples: Hello World Agent
  • [Java恶补day9] 438.找到字符串中所有字母异位词
  • JavaSE核心知识点05实践项目(学生管理系统-控制台版)
  • 前向渲染和延迟渲染
  • 利用仿真软件学习一下RC无源滤波和有源滤波电路
  • 【部署】手搓一个dify可用的rerank模型接口服务
  • VSCode Agent 和 Cursor Agent 系统提示词对比
  • There is a chart instance already initialized on the dom. 柱状图初始化时报前面这个错误如何解决?
  • Python异常处理:优雅地应对程序运行时的“意外”
  • 三轴云台之不完全微分PID控制算法篇
  • 可视化数据大屏适配方案之Scale等比缩放
  • java上机测试错题回顾(3)
  • YOLOv11冻结训练+微调策略实战教程(含效果对比分析)
  • 运维三剑客——grep
  • 【动态规划】子数组系列(二)
  • GEO革命:重新定义AI时代的内容规则
  • 代码随想录算法训练营第五十二天
  • 【笔试训练4】Fibonacci数列|单词搜索|杨辉三角
  • 11、总账管理(GL)数字化转型:财务核心支柱,承担着业务系统复杂多变的重任
  • 测试W5500的第9步_使用SNTP实现网络时间同步
  • 尚硅谷redis7 63-69 redis哨兵监控之理论简介
  • javase JDK 环境变量配置
  • 关于线程死锁的相关知识
  • PortSwigger-01-信息泄露