WPF Prism ViewInjection
1.通过Demo学WPF—数据绑定(二)2.WPF中值转换器的使用3.WPF中如何使用HandyCotrol控件库4.记一次WPF集成SemanticKernel+OneAPI+讯飞星火认知大模型实践5.SemanticKernel如何基于自有数据聊天6.WPF中动画教程(DoubleAnimation的基本使用)7.WPF动画教程(PointAnimationUsingPath的使用)8.WPF基础:在Canvas上绘制图形9.WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中10.WPF/C#:如何显示具有层级关系的数据11.WPF/C#:ProgressBar的基本使用12.WPF/C#:理解与实现WPF中的MVVM模式13.SemanticKernel:添加插件14.WPF/C#:异常处理15.WPF/C#:程序关闭的三种模式16.wpfui:一个开源免费具有现代化设计趋势的WPF控件库17.WPF/C#:如何将数据分组显示18.WPF/C#:更改界面的样式19.LiveCharts2:简单灵活交互式且功能强大的.NET图表库20.WPF/C#:显示分组数据的两种方式21.WPF/C#:在DataGrid中显示选择框22.WPF/C#:数据绑定到方法23.WPF/C#:BusinessLayerValidation24.WPF/C#:如何实现拖拉元素25.WPF在.NET9中的重大更新:Windows 11 主题26.WPF/C#:在WPF中如何实现依赖注入27.ScreenToGif:一款开源免费且好用的录屏转Gif软件28.WPF/C#:实现导航功能29.SemanticKernel/C#:实现接口,接入本地嵌入模型30.SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用31.使用SiliconCloud快速体验SimpleRAG(手把手教程)32.使用Ollama本地离线体验SimpleRAG(手把手教程)33.在SimpleRAG中使用SiliconCloud快速测试Function Calling34.SimpleTranslationAIAgent:基于C#与LLM的翻译AI Agent35.SimpleTranslationAIAgent借助SiliconCloud API 构建自己的专属翻译助手36.SimpleAISearch:C# + DuckDuckGo 实现简单的AI搜索37.SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用38.SimpleRAG-v1.0.3:增加文件对话功能39.如何自己动手实现一个图片解答小助手40.WPF Prism 01-BootstrapperShell41.WPF Prism ViewDiscovery
42.WPF Prism ViewInjection
43.TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面44.VLM-OCR-Demo:一个使用VLM用于OCR任务的示例45.C#调用Python脚本的方式(一),以PaddleOCR-GUI为例ViewInjection介绍
ViewInjection是Prism框架提供的一种机制,用于将视图动态地注入到指定的容器(Region)中。这种注入方式允许你在运行时动态地添加、移除或替换视图,从而实现更灵活的用户界面设计。
ViewInjection示例
GitHub地址:https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/05-ViewInjection
项目结构如下图所示:
运行效果如下所示:
实现的代码:
上一篇我们了解到IRegionManager
是一个非常重要的接口,它负责管理应用程序中的区域(Regions)。这里我们新接触到了IContainerExtension
,它是干嘛的呢?
IContainerExtension
接口继承了IContainerProvider
和IContainerRegistry
接口,结合了这两个接口的功能。
IContainerProvider
:提供依赖注入容器的解析功能,允许你从容器中解析服务。IContainerRegistry
:提供注册服务到依赖注入容器的功能,允许你在容器中注册服务。
通过实现IContainerExtension接口,你可以创建一个扩展的依赖注入容器,既可以注册服务,也可以解析服务。这在构建模块化应用程序时非常有用,因为它允许你在不同的模块之间共享和管理依赖关系。
视图注入代码:
var view = _container.Resolve<ViewA>();
IRegion region = _regionManager.Regions["ContentRegion"];
region.Add(view);
var view = _container.Resolve<ViewA>();
这行代码使用依赖注入容器(IContainerExtension)来解析并创建一个ViewA视图的实例。ViewA是一个用户控件或视图,应该已经在容器中注册过。IRegion region = _regionManager.Regions["ContentRegion"];
这行代码从区域管理器(IRegionManager)中获取名为"ContentRegion"的区域。区域是Prism中的一个概念,用于定义视图可以被注入的地方。"ContentRegion"应该在XAML文件中定义,例如在MainWindow.xaml中。region.Add(view);
这行代码将之前创建的ViewA实例添加到"ContentRegion"区域中。这样,ViewA视图就会显示在"ContentRegion"中。
这里可能大家会有一个问题就是为什么直接从容器中能直接解析出ViewA呢?那说明ViewA已经注入到容器中了,那么ViewA是什么时候在哪里注入的呢?
就像Container.Resolve<MainWindow>();
一样,Prism将主窗体与视图自动注入到容器中了,至于具体实现,我们现在先不管,先学会用再说。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器