WPF Prism ViewInjection

ViewInjection介绍

ViewInjection是Prism框架提供的一种机制,用于将视图动态地注入到指定的容器(Region)中。这种注入方式允许你在运行时动态地添加、移除或替换视图,从而实现更灵活的用户界面设计。

ViewInjection示例

GitHub地址:https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/05-ViewInjection

项目结构如下图所示:

运行效果如下所示:

实现的代码:

上一篇我们了解到IRegionManager是一个非常重要的接口,它负责管理应用程序中的区域(Regions)。这里我们新接触到了IContainerExtension,它是干嘛的呢?

IContainerExtension接口继承了IContainerProviderIContainerRegistry接口,结合了这两个接口的功能。

  • IContainerProvider:提供依赖注入容器的解析功能,允许你从容器中解析服务。
  • IContainerRegistry:提供注册服务到依赖注入容器的功能,允许你在容器中注册服务。

通过实现IContainerExtension接口,你可以创建一个扩展的依赖注入容器,既可以注册服务,也可以解析服务。这在构建模块化应用程序时非常有用,因为它允许你在不同的模块之间共享和管理依赖关系。

视图注入代码:

csharp 复制代码
 var view = _container.Resolve<ViewA>();
 IRegion region = _regionManager.Regions["ContentRegion"];
 region.Add(view);
  1. var view = _container.Resolve<ViewA>();
    这行代码使用依赖注入容器(IContainerExtension)来解析并创建一个ViewA视图的实例。ViewA是一个用户控件或视图,应该已经在容器中注册过。
  2. IRegion region = _regionManager.Regions["ContentRegion"];
    这行代码从区域管理器(IRegionManager)中获取名为"ContentRegion"的区域。区域是Prism中的一个概念,用于定义视图可以被注入的地方。"ContentRegion"应该在XAML文件中定义,例如在MainWindow.xaml中。
  3. region.Add(view);
    这行代码将之前创建的ViewA实例添加到"ContentRegion"区域中。这样,ViewA视图就会显示在"ContentRegion"中。

这里可能大家会有一个问题就是为什么直接从容器中能直接解析出ViewA呢?那说明ViewA已经注入到容器中了,那么ViewA是什么时候在哪里注入的呢?

就像Container.Resolve<MainWindow>();一样,Prism将主窗体与视图自动注入到容器中了,至于具体实现,我们现在先不管,先学会用再说。

相关推荐
听麟3 小时前
HarmonyOS 6.0+ 跨端智慧政务服务平台开发实战:多端协同办理与电子证照管理落地
笔记·华为·wpf·音视频·harmonyos·政务
听麟7 小时前
HarmonyOS 6.0+ APP AR文旅导览系统开发实战:空间定位与文物交互落地
人工智能·深度学习·华为·ar·wpf·harmonyos
聆风吟º1 天前
CANN hccl 深度解析:异构计算集群通信库的跨节点通信与资源管控实现逻辑
人工智能·wpf·transformer·cann
无心水1 天前
分布式定时任务与SELECT FOR UPDATE:从致命陷阱到优雅解决方案(实战案例+架构演进)
服务器·人工智能·分布式·后端·spring·架构·wpf
LZL_SQ1 天前
HCCL测试框架中AllReduce边界条件测试设计深度剖析
wpf·cann
User_芊芊君子2 天前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
就是有点傻3 天前
WPF按钮走马灯效果
wpf
zuozewei3 天前
虚拟电厂聚合商平台安全技术体系深度解读
安全·wpf
极客智造3 天前
WPF 自定义控件:AutoGrid 实现灵活自动布局的网格控件
wpf
极客智造3 天前
WPF Grid 布局高效扩展:GridHelpers 附加属性工具类全解析
wpf