WPF Prism.Wpf Prism.DryIOC integrate modules into MainWindow, invoke other project as dll

news/2025/10/7 17:31:37/文章来源:https://www.cnblogs.com/Fred1987/p/19128657
Install-Package Prism.DryIOC;
Install-Package Prism.Wpf;

 

//App.xaml
<prism:PrismApplication x:Class="WpfApp26.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp26"xmlns:prism="http://prismlibrary.com/">
</prism:PrismApplication>//App.xaml.cs
using DGView;
using ImageView;
using System.Configuration;
using System.Data;
using System.Windows;
using System.Windows.Input;
using WpfApp26.Services;
using WpfApp26.ViewModels;
using WpfApp26.Views;namespace WpfApp26
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{IRegionManager regionManager;protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<ITimeGuidService, TimeGuidService>();containerRegistry.RegisterForNavigation<HeaderView, HeaderViewModel>("headerView");containerRegistry.RegisterForNavigation<MainWindow, MainWindowViewModel>("MainView");}protected override void OnInitialized(){var mainWind = Container.Resolve<MainWindow>();regionManager = Container.Resolve<IRegionManager>();mainWind.Show();}protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog){base.ConfigureModuleCatalog(moduleCatalog);moduleCatalog.AddModule<DgViewModule>();moduleCatalog.AddModule<ImageModule>();}}}//D:\C\WpfApp26\DGView\DgViewModule.cs
using DGView.Services;
using DGView.ViewModels;
using DGView.Views;
using System;
using System.Collections.Generic;
using System.Text;namespace DGView
{public class DgViewModule : IModule{public void OnInitialized(IContainerProvider containerProvider){var regionManager = containerProvider.Resolve<IRegionManager>();// Navigate to DgView in the DgRegionregionManager.RequestNavigate("LeftRegion", "dgView");}public void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<IIDService,IDService>();containerRegistry.Register<INameService,NameService>();containerRegistry.Register<IISBNService,ISBNService>();containerRegistry.RegisterForNavigation<DgView, DgViewModel>("dgView");}}
}//D:\C\WpfApp26\ImageView\ImageModule.cs
using ImageView.ViewModels;
using ImageView.Views;
using System;
using System.Collections.Generic;
using System.Text;namespace ImageView
{public class ImageModule : IModule{public void OnInitialized(IContainerProvider containerProvider){//var regionManager= containerProvider.Resolve<IRegionManager>();//regionManager.RequestNavigate("RightViewRegion", "imgView");
        }public void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.RegisterForNavigation<ImgView, ImgViewModel>("imgView");}}
}

 

 

image

 

 

 

 

 

 

 

 

image

 

image

 

 

 

//MainModule
//App.xaml
<prism:PrismApplication x:Class="WpfApp26.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp26"xmlns:prism="http://prismlibrary.com/">
</prism:PrismApplication>//App.xaml.cs
using DGView;
using ImageView;
using System.Configuration;
using System.Data;
using System.Windows;
using System.Windows.Input;
using WpfApp26.Services;
using WpfApp26.ViewModels;
using WpfApp26.Views;namespace WpfApp26
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{IRegionManager regionManager;protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<ITimeGuidService, TimeGuidService>();containerRegistry.RegisterForNavigation<HeaderView, HeaderViewModel>("headerView");containerRegistry.RegisterForNavigation<MainWindow, MainWindowViewModel>("MainView");}protected override void OnInitialized(){var mainWind = Container.Resolve<MainWindow>();regionManager = Container.Resolve<IRegionManager>();mainWind.Show();}protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog){base.ConfigureModuleCatalog(moduleCatalog);moduleCatalog.AddModule<DgViewModule>();moduleCatalog.AddModule<ImageModule>();}}}//using System;
using System.Collections.Generic;
using System.Text;namespace WpfApp26.Services
{public interface ITimeGuidService{string GetTimeGuid();}public class TimeGuidService : ITimeGuidService{int idx = 0;public string GetTimeGuid(){return $"{++idx}_{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff")}_{Guid.NewGuid():N}";}}
}
using Prism.Common;
using System;
using System.Collections.Generic;
using System.Text;
using WpfApp26.Services;namespace WpfApp26.ViewModels
{public class HeaderViewModel:BindableBase{ITimeGuidService timeGuidService;public HeaderViewModel(ITimeGuidService timeGuidServiceValue){timeGuidService = timeGuidServiceValue;HeaderStr = timeGuidService.GetTimeGuid();Task.Run(() =>{InitTimer();});}private void InitTimer(){System.Timers.Timer tmr= new System.Timers.Timer();tmr.Interval = 1000;tmr.Elapsed += Tmr_Elapsed;tmr.Start();}private void Tmr_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){HeaderStr = timeGuidService.GetTimeGuid();}private string headerStr;public string HeaderStr{get{return headerStr;}set{SetProperty(ref headerStr, value);}}}
}
<UserControl x:Class="WpfApp26.Views.HeaderView"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:WpfApp26.Views"xmlns:prism="http://prismlibrary.com/"mc:Ignorable="d"Height="100"prism:ViewModelLocator.AutoWireViewModel="True"><Grid><TextBlock Text="{Binding HeaderStr}"><TextBlock.Resources><Style TargetType="TextBlock"><Setter Property="FontSize" Value="50"/><Setter Property="HorizontalAlignment" Value="Left"/><Setter Property="VerticalAlignment" Value="Center"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="FontSize" Value="50"/><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers></Style></TextBlock.Resources></TextBlock></Grid>
</UserControl>
using DGView.Views;
using ImageView.Views;
using Prism;
using Prism.Navigation.Regions;
using System;
using System.Collections.Generic;
using System.Text;
using WpfApp26.Views;namespace WpfApp26.ViewModels
{public class MainWindowViewModel:BindableBase{IRegionManager regionManager;IContainerProvider containerProvider;private HeaderView headerView;public MainWindowViewModel(IRegionManager regionManagerValue, IContainerProvider containerProviderValue){regionManager = regionManagerValue;containerProvider = containerProviderValue;}public void NavigateToView(string viewName="headerView"){//regionManager.RequestNavigate("HeaderRegion", viewName);headerView=containerProvider.Resolve<HeaderView>();HeaderViewContent=headerView;var dgView = containerProvider.Resolve<DgView>();LeftViewContent= dgView;var imgView = containerProvider.Resolve<ImgView>();RightViewContent= imgView;}private object headerViewContent;public object HeaderViewContent{get{return headerViewContent;}set{SetProperty(ref headerViewContent, value);}}private object leftViewContent;public object LeftViewContent{get{return leftViewContent;}set{SetProperty(ref leftViewContent, value);}}private object rightViewContent;public object RightViewContent{get{return rightViewContent;}set{SetProperty(ref rightViewContent, value);}}}
}<Window x:Class="WpfApp26.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp26"xmlns:prism="http://prismlibrary.com/"        mc:Ignorable="d"WindowState="Maximized"Title="MainWindow"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"prism:ViewModelLocator.AutoWireViewModel="True"><Grid><Grid.RowDefinitions><RowDefinition Height="100"/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><ContentControl Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Content="{Binding HeaderViewContent}"/><ContentControl Grid.Row="1" Grid.Column="0"Content="{Binding LeftViewContent}"/><ContentControl Grid.Row="1" Grid.Column="1"Content="{Binding RightViewContent}"/></Grid>
</Window>//DgViewModule
using System;
using System.Collections.Generic;
using System.Text;namespace DGView.Model
{public class Book{public int Id { get; set; }public string Name { get; set; }public string ISBN {  get; set; }public string Title { get; set; }public string Topic { get; set; }}
}
using System;
using System.Collections.Generic;
using System.Text;namespace DGView.Services
{public interface IIDService{int GetID();}public class IDService : IIDService{int idx = 0;public int GetID(){return Interlocked.Increment(ref idx);}}public interface INameService{public string GetName();}public class NameService : INameService{int idx = 0;public string GetName(){return $"Name_{Interlocked.Increment(ref idx)}";}}public interface IISBNService{string GetISBN();}public class ISBNService : IISBNService{int idx = 0;public string GetISBN(){return $"ISBN_{Interlocked.Increment(ref idx)}_{Guid.NewGuid():N}";}}
}
using DGView.Model;
using DGView.Services;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;namespace DGView.ViewModels
{public class DgViewModel : BindableBase{IIDService idService;INameService nameService;IISBNService isbnService;public DgViewModel(IDService idServiceValue, INameService nameServiceValue, IISBNService isbnServiceValue){idService = idServiceValue;nameService = nameServiceValue;isbnService = isbnServiceValue;InitBooksCollection();}public void InitBooksCollection(){BooksCollection=new ObservableCollection<Book>();for(int i=1;i<10001;i++){BooksCollection.Add(new Book(){Id = idService.GetID(),Name = nameService.GetName(),ISBN = isbnService.GetISBN(),Title = $"Title_{i}",Topic = $"Topic_{i}"});}}private ObservableCollection<Book> booksCollection;public ObservableCollection<Book> BooksCollection{get{return booksCollection;}set{SetProperty(ref booksCollection, value);}}}
}
<UserControl x:Class="DGView.Views.DgView"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:DGView.Views"xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"><Grid Background="Cyan"><DataGrid ItemsSource="{Binding BooksCollection,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"FontSize="30"VirtualizingPanel.IsVirtualizing="True"VirtualizingPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLength="2,2"VirtualizingPanel.CacheLengthUnit="Item"ScrollViewer.IsDeferredScrollingEnabled="True"ScrollViewer.CanContentScroll="True"AutoGenerateColumns="True"CanUserAddRows="False"></DataGrid></Grid>
</UserControl>using DGView.Services;
using DGView.ViewModels;
using DGView.Views;
using System;
using System.Collections.Generic;
using System.Text;namespace DGView
{public class DgViewModule : IModule{public void OnInitialized(IContainerProvider containerProvider){var regionManager = containerProvider.Resolve<IRegionManager>();// Navigate to DgView in the DgRegionregionManager.RequestNavigate("LeftRegion", "dgView");}public void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<IIDService,IDService>();containerRegistry.Register<INameService,NameService>();containerRegistry.Register<IISBNService,ISBNService>();containerRegistry.RegisterForNavigation<DgView, DgViewModel>("dgView");}}
}//ImgViewModule
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using System.Windows.Media;
using System.Windows.Media.Imaging;namespace ImageView.ViewModels
{public class ImgViewModel : BindableBase{List<string> imgsList;int imgsCount = 0;public ImgViewModel(){          string imgDir = @"Images";if(Directory.Exists(imgDir)){imgsList = new List<string>(Directory.GetFiles(imgDir));imgsCount = imgsList.Count;ImgUrl=imgsList[0];ImgSource = GetImgSourceViaUrl(imgsList[0]);}Task.Run(() =>{InitTimers();});            }private void InitTimers(){System.Timers.Timer tmr=new System.Timers.Timer();tmr.Elapsed += Tmr_Elapsed;tmr.Interval = 1000;tmr.Start();}int idx = 0;private void Tmr_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){ImgUrl = imgsList[++idx % imgsCount];ImgSource = GetImgSourceViaUrl(ImgUrl);}private string imgUrl;public string ImgUrl{get{return imgUrl; }set{SetProperty(ref imgUrl, value);}}private ImageSource imgSource;public ImageSource ImgSource{get{return imgSource;}set{SetProperty(ref imgSource, value);}}private ImageSource GetImgSourceViaUrl(string imgUrl){BitmapImage bmi = new BitmapImage();if(!File.Exists(imgUrl)){return bmi;}bmi.BeginInit();bmi.UriSource=new Uri(imgUrl, UriKind.RelativeOrAbsolute);bmi.EndInit();bmi.Freeze();return bmi;}}
}<UserControl x:Class="ImageView.Views.ImgView"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:ImageView.Views"xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition Height="Auto"/></Grid.RowDefinitions><Image Grid.Row="0"Source="{Binding ImgSource,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"Stretch="Fill"/><TextBlock Text="{Binding ImgUrl}"Grid.Row="1"FontSize="30"/></Grid>
</UserControl>using ImageView.ViewModels;
using ImageView.Views;
using System;
using System.Collections.Generic;
using System.Text;namespace ImageView
{public class ImageModule : IModule{public void OnInitialized(IContainerProvider containerProvider){//var regionManager= containerProvider.Resolve<IRegionManager>();//regionManager.RequestNavigate("RightViewRegion", "imgView");
        }public void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.RegisterForNavigation<ImgView, ImgViewModel>("imgView");}}
}

 

 

 

 

image

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linq的join

来给你几个层次递进的 LINQ Join 示例,从最基础的单表连接到多表、对象导航、分组连接全部覆盖。 以下示例均基于 C# + LINQ to Objects(适用于 EF Core / ABP 的仓储查询场景)。🌱 一、基本示例:两表连接(内连…

网站在线解压齐大胜请于果做网站是第几集

折叠屏扫描二维码方案 介绍 本示例介绍使用自定义界面扫码能力在折叠屏设备中实现折叠态切换适配。自定义界面扫码使用系统能力customScan&#xff0c;其提供相机流的初始化、启动扫码、识别、停止扫码、释放相机流资源等能力。折叠屏折叠状态通过监听display的foldStatusCha…

实用指南:工业智能网关保障冷冻仓储设备无人值守安全运行

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站建设类别wordpress 应用监测

UE5.1_使用技巧&#xff08;常更&#xff09; 1. 清除所有断点 运行时忘记蓝图中的断点可能会出现运行错误的可能&#xff0c;务必运行是排除一切断点&#xff0c;逐个排查也是办法&#xff0c;但是在事件函数多的情况下会很复杂且慢节奏&#xff0c;学会一次性清除所有很有必…

深喉咙企业网站帮助深圳小程序建设公司

文章目录 一、安装 rpunct二、使用三、下载模型时报错1、报错详情2、报错原因3、解决方案 四、程序运行时报错1、报错详情2、报错原因3、解决方案 五、修改默认缓存路径 一、安装 rpunct pip install rpunct 相关依赖包信息&#xff1a; langdetect1.0.9 pandas1.2.4 simpletr…

实用指南:用PyTorch从零开始编写DeepSeek-V2

实用指南:用PyTorch从零开始编写DeepSeek-V2pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

十所高校角逐对话式AI任务机器人挑战赛

十所来自三大洲的高校团队将参与首届融合语音与视觉的多模态对话AI挑战赛,开发能协助完成多步骤烹饪和DIY项目的任务助手,涉及知识表示、常识推理和语言生成等多项AI技术。十所高校团队入选参与Alexa Prize任务机器人…

SCIM漏洞挖掘实战指南

本文深入探讨SCIM协议安全风险,涵盖身份验证绕过、令牌管理漏洞、用户重配置缺陷等实战案例,帮助安全研究人员发现和利用企业身份管理系统中的关键漏洞。SCIM Hunting - Beyond SSO 2025年5月8日 - 发布于 Francesco…

网站行业阿里云备案

下载 官网&#xff1a; http://tomcat.apache.org/ 2.安装 默认 3.安装成功

做网站大概多少钱四川企业网站开发

今天在整理JAVA基础知识时发现几大基本数据类型的封装类都有其BYTES值,也就是位数,除了Boolean。特意查了下资料,发现有几大说法,如下&#xff1a; 1.单个的boolean 类型变量在编译的时候是使用的int 类型。 boolean atrue;//这个a在JVM中占4个字节即&#xff1a;32位。 2.bo…

虚拟文件系统

虚拟文件系统 1.向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异 2.要求下层的文件系统必须实现某些规定的函数功能。open/read/write统一使用vnode来存储下层文件系统的目录项 vnode只存在…

博客迁移至CSDN!!!

我的csdn主页:https://blog.csdn.net/2301_80265763

博客迁移到CSDN!!!

我的csdn主页:https://blog.csdn.net/2301_80265763

湖北住房与城乡建设厅网站wordpress前台出现旧版文件夹

信息打点——前端JS框架 文章目录 信息打点——前端JS框架小节概述-思维导图JS安全概述什么是JS渗透测试&#xff1f;前后端差异JS安全问题流行的Js框架如何判定JS开发应用&#xff1f; 测试方法&#xff08;JS文件的获取以及分析方法1、手工搜索分析2、半自动Burp分析插件介绍…

手动实现一个C++绑定Lua脚本的库

手动实现一个C++绑定Lua脚本的库把C++绑定到Lua脚本的方法很多。但是在C++11之前,都没有太好的办法。比如tolua++,这个工具需要手动编写额外的pkg文件,每次需要手动执行命令生成额外的C++文件,使用比较繁琐,所以逐…

代码随想录算法训练营第十天 | leetcode 232 225 20 1047

用栈实现队列 整体思路:使用两个栈一个当作入栈,一个当作出栈,当队列需要出队列的时候,将入栈的元素,倒序放入出栈里面,对出栈进行pop操作即可,若需要获得队头元素,同理,执行出栈peek操作即可,判断队列是否为…

重庆永川网站建设公司广东个人备案网站内容

SQL RDBMS 概念 RDBMS是关系数据库管理系统(Relational Database Management System)的缩写。 RDBMS是SQL的基础&#xff0c;也是所有现代数据库系统(如MS SQL Server、IBMDB2、Oracle、MySQL和MicrosoftAccess)的基础。 关系数据库管理系统(Relational Database Management Sy…

深入解析:黑马k8s(十七)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

怎么做下载类的网站课程平台网站建设报价

Gateway整合Sentinel ​ 前面使用过Sentinel组件对服务提供者、服务消费者进行流控、限流等操作。除此之外&#xff0c;Sentinel还支持对Gateway、Zuul等主流网关进行限流。 ​ 自sentinel1.6.0版开始&#xff0c;Sentinel提供了Gateway的适配模块&#xff0c;能针对路由(rou…

openJDK历史版本

https://jdk.java.net/archive/