wpf prism 《1》、区域 、模块化

安装prism.DryIoc

在这里插入图片描述

修改app.xaml

在这里插入图片描述

<prism:PrismApplication x:Class="WpfApp3.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp3"xmlns:prism="http://prismlibrary.com/"><Application.Resources></Application.Resources>
</prism:PrismApplication>

在这里插入图片描述

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : PrismApplication
{protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){//throw new NotImplementedException();}
}
安装 模板 prism Template pack

在这里插入图片描述
在这里插入图片描述

DirectoryModuleCatalog、XamlModuleCatalog、ConfigurationModuleCatalog 都间接继承IModuleCatalog

在这里插入图片描述

Prism 区域

在这里插入图片描述
在这里插入图片描述
》》 prism:ViewModelLocator.AutoWireViewModel=“True”,
》》View要和ViewModel自带匹配,不需要 this.DataContext = new ViewModel();
》》需要遵循一个些规定, ViewModels 中的View名称+ViewModel 这种命名规则

<Window x:Class="BlankApp2.Views.MainView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"Title="{Binding Title}" Height="350" Width="525" ><Grid><Grid.RowDefinitions><RowDefinition Height="50"></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><StackPanel Orientation="Horizontal" HorizontalAlignment="Right"><Button Content="模块A" Command="{Binding OpenCommand}" CommandParameter="ViewA"></Button><Button Content="模块B" Command="{Binding OpenCommand}" CommandParameter="ViewB"></Button></StackPanel><ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion" /></Grid>
</Window>
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using System;namespace BlankApp2.ViewModels
{public class MainViewModel : BindableBase{private string _title = "Prism Application";public string Title{get { return _title; }set { SetProperty(ref _title, value); }}private readonly IRegionManager _regionManager;public MainViewModel(IRegionManager regionManager){this._regionManager = regionManager;this.OpenCommand = new DelegateCommand<string>(Open);}private void Open(string obj){_regionManager.Regions["ContentRegion"].RequestNavigate(obj);}public  DelegateCommand<string> OpenCommand { get; private set; }}
}
using BlankApp2.Views;
using Prism.Ioc;
using System.Windows;namespace BlankApp2
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App{protected override Window CreateShell(){return Container.Resolve<MainView>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.RegisterForNavigation<ViewA>();           containerRegistry.RegisterForNavigation<ViewB>();//可以不使用默认匹配规则,自己指定对应的上下文//containerRegistry.RegisterForNavigation<ViewA,ViewAViewModel>();//containerRegistry.RegisterForNavigation<ViewA,ViewBViewModel>();}}
}

模块化 《1》 强引用

在这里插入图片描述
》》》通过prism Blank APP WPF 创建一个wpf应用
在这里插入图片描述
在这里插入图片描述
》》》新建模块步骤

  1. 新建wpf应用程序
  2. nugut 》》Prism.DryIoc
  3. 删除 App.xaml AssembylyInfo.cs MainWindow.xaml 这三个文件,同时把项目修改 类库
  4. 新建Views 文件夹 存放 视图文件
  5. 新建一个 项目名称+Profile 命名的 类

在这里插入图片描述
在这里插入图片描述

using ModuleA.Views;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ModuleA
{public class ModuleAProfile : IModule{public void OnInitialized(IContainerProvider containerProvider){// throw new NotImplementedException();}public void RegisterTypes(IContainerRegistry containerRegistry){//ViewA  是Views下面的 视图文件containerRegistry.RegisterForNavigation<ViewA>();}}
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
需要在主程序 引用模块
在这里插入图片描述

在这里插入图片描述

模块化 《2》 利用目录,不需要引用这些模块的dll,上面的方式需要引用dll

在这里插入图片描述

using BlankApp2.Views;using Prism.Ioc;
using Prism.Modularity;using System.Windows;namespace BlankApp2
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App{protected override Window CreateShell(){return Container.Resolve<MainView>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){//containerRegistry.RegisterForNavigation<ViewA>();//containerRegistry.RegisterForNavigation<ViewB>();}protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog){//moduleCatalog.AddModule<StudentProfile>();//moduleCatalog.AddModule<ModuleAProfile>();//moduleCatalog.AddModule<ModuleCProfile>();//base.ConfigureModuleCatalog(moduleCatalog);}protected override IModuleCatalog CreateModuleCatalog(){return new DirectoryModuleCatalog() { ModulePath = @".\Modules" };}}
}

在这里插入图片描述

模块化 配置文件的方式可以使用App.config进行配置,也可以使用xml文件的方式。 都需要把模块dll引入

主程序 添加 配置文件app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration><configSections><section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf" /></configSections><startup></startup><modules><module assemblyFile="ModuleA.dll" moduleType="ModuleA.ModuleAProfile, ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleAProfile" startupLoaded="True" /></modules>
</configuration>

在这里插入图片描述

xaml 配置文件

在这里插入图片描述

<m:ModuleCatalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:m="clr-namespace:Prism.Modularity;assembly=Prism.Wpf"><m:ModuleInfo ModuleName="ModuleAProfile" ModuleType="ModuleA.ModuleAProfile, ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /></m:ModuleCatalog>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

using ModuleA.Views;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ModuleA
{public class ModuleAProfile : IModule{public void OnInitialized(IContainerProvider containerProvider){// throw new NotImplementedException();var regionManager = containerProvider.Resolve<IRegionManager>();regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA));}public void RegisterTypes(IContainerRegistry containerRegistry){//containerRegistry.RegisterForNavigation<ViewA>();}}
}

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

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

相关文章

vue2的使用

准备容器引包&#xff08;官网&#xff09; — 开发版本/生产版本创建Vue实例 new Vue()指定配置项&#xff0c;渲染数据 el:指定挂载点data提供数据 可以把线上的cdn的vue的地址下载到本地进行依赖。 Vue2下载地址 https://v2.vuejs.org/v2/guide/installation.html vue.js没…

Linux虚拟机搭建K8S环境

文章目录 一、环境准备二、系统初始化三、部署master四、添加node节点五、部署网络六、部署dashboard七、登录dashboard面板 一、环境准备 首先在vmware上新建4台相同配置的虚拟机&#xff0c;除了IP和主机名外&#xff0c;其余配置相同。由于是搭建K8S初始环境&#xff0c;没…

开学寄快递,行李轻松寄,出行无压力

“春风得意马蹄疾&#xff0c;一日看尽长安花。”新的学期&#xff0c;新的征程&#xff0c;新生们在准备迎接开学时&#xff0c;不想拖着重重的行李开学的&#xff0c;那么寄快递这件事可得提上日程啦! 一、如何选择快递 如何选择一家价格实惠的快递公司成为了大家关注的焦点…

Linux bash脚本 批量创建文件

目录 一. 需求二. 前置知识一. 无进度条版本1.1 知识点1.2 代码1.3 效果 二. 有进度条版本2.1 代码2.2 效果 一. 需求 在当前目录下生成指定年份的文件&#xff0c;要求从生成1月到12月&#xff0c;每个月份的文件。 若用户不指定年份&#xff0c;则默认生成当前年的文件提示…

【C++】手动实现String类的封装(分文件编译)

实现了String类的大部分封装&#xff0c;采用分文件编译 //mystring.h #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include <cstring> using namespace std;class myString { private:char *str; //定义一个字符串int size; //记录字符串…

[知识分享]华为铁三角工作法

在通信技术领域&#xff0c;尤其是无线通信和物联网领域&#xff0c;“华为铁三角”是华为公司内部的一种销售、交付和服务一体化的运作模式。这种模式强调的是以客户为中心&#xff0c;通过市场、销售、交付和服务三个关键环节的紧密协作&#xff0c;快速响应客户需求&#xf…

tensorrt plugin

自定义plugin 流程 首先明确要开发的算子&#xff0c;最好是 CUDA 实现&#xff1b;继承 IPluginV2DynamicExt / IPluginV2IOExt类实现一个Plugin 类&#xff0c;在这里调用前面实现的算子&#xff1b;继承 IPluginCreator 类实现一个 PluginCreator 类&#xff0c;用于创建插…

JeecgBoot积木报表AviatorScript表达式注入漏洞复现

文章目录 漏洞信息漏洞复现环境搭建poc复现DNSLog验证 漏洞信息 影响组件&#xff1a;JimuReport积木报表 影响版本&#xff1a;v1.6.0 &#xff1c; JimuReport ≤ 1.7.8 漏洞名称&#xff1a;AviatorScript表达式注入漏洞 漏洞链接&#xff1a;积木报表软件存在AviatorSc…

redis分布式是如何实现的(面试版)

需要结合项目中的业务进行回答&#xff0c;通常情况下&#xff0c;分布式锁使用的场景&#xff1a;集群情况下的定时任务、抢单、幂等性场景。 下面先来看一个抢卷场景&#xff1a; 以下情况会出现超卖情况&#xff1a; 因为线程会交替执行&#xff0c;所以线程查询优惠价的数…

在大语言模型中,生成文本的退出机制,受max_generate_tokens限制,并不是所有的问答都完整的跑完整个transformer模型

目录 在大语言模型中,生成文本的退出机制,受max_generate_tokens限制,并不是所有的问答都完整的跑完整个transformer模型 1. max_generate_tokens的作用 2. 退出机制与Transformer模型 3. 实际应用中的影响 4. 结论 在大语言模型中,生成文本的退出机制,受max_genera…

php法律事务综合管理系统Java律师事务所业务流程管理平台python法律服务与案件管理系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

【解决方案】项目重构之如何使用 MySQL 替换原来的 MongoDB

前言 在笔者 Java 后端开发的项目经历中&#xff0c;MySQL 和 MongoDB 都有使用过作为后端的数据库来对业务数据进行持久化&#xff0c;两者没有孰优孰劣之分&#xff0c;都可以在合适的场景下发挥出它们的优势。 今天要分享的是一个项目重构过程中如何将数据库选型由原来的 Mo…

“线程池中线程异常后:销毁还是复用?”

目录 一、验证execute提交线程池中 测试 结论 二、验证submit提交线程池中 测试 结论 三、源码解析 查看submit方法的执行逻辑 查看execute方法的执行逻辑 为什么submit方法&#xff0c;没有创建新的线程&#xff0c;而是继续复用原线程&#xff1f; 四、总结 需要说…

【UML建模】时序图的那点事

【UML建模】时序图的那点事 开篇词&#xff1a;干货篇&#xff1a;1.概述2.时序图的组成元素2.1角色&#xff08;Actor&#xff09;&#xff1a;2.2生命线&#xff08;Lifeline&#xff09;&#xff1a;2.3消息&#xff08;Message&#xff09;&#xff1a;2.4激活条&#xff0…

【Day07】

目录 MySQL-DQL- 基本查询 MySQL-DQL- 条件查询 MySQL-DQL- 聚合函数 MySQL-DQL- 分组查询 MySQL-DQL- 排序查询 MySQL-DQL- 分页查询 MySQL-DQL- 案例 MySQL-多表设计-一对多 MySQL-多表设计-一对多-外键约束 MySQL-多表设计-一对一&多对多 MySQL-多表设计-案例…

学习日志8.30--防火墙NAT

目录 一、实验环境配置 二、配置防火墙静态NAT一对一 三、配置防火墙静态NAT多对多 四、配置防火墙NAT端口转换NAPT 五、防火墙smart-nat、easyip 六、防火墙三元组NAT 在学习过基于路由器的NAT网络地址转换&#xff0c;现在学习基于防火墙NAT的网络地址转换&#xff0c;…

模型 7S分析法(麦肯锡)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。组织全面诊断&#xff0c;战略协同优化。 1 7S分析法(麦肯锡)的应用 1.1 邮储银行的转型&#xff1a;基于麦肯锡7S模型的竞争力提升 中国邮储银行面临着激烈的金融行业竞争&#xff0c;为了迅速提升…

# 利刃出鞘_Tomcat 核心原理解析(十一)-- Tomcat 附加功能 WebSocket -- 2

利刃出鞘_Tomcat 核心原理解析&#xff08;十一&#xff09;-- Tomcat 附加功能 WebSocket – 2 一、Tomcat专题 - WebSocket - 案例 - 登录功能 1、在项目 dzs168_chat_room 中&#xff0c;导入 tomcat 项目依赖&#xff08; dzs168_chat_room/web/lib/ &#xff09; idea -…

数据结构与算法---排序算法

文章目录 排序选择排序冒泡排序插入排序 希尔排序归并排序快速排序桶排序计数排序基数排序堆排序 排序 排序是指将一组数据按照特定的规则或顺序进行排列&#xff0c;比如一个数组[1, 5, 2, 4, 3]按照从小到大的顺序排列后就是[1,2,3,4,5]。 排序算法&#xff08;Sorting alg…

全球1km分辨率人口分布栅格数据

我们在《全国省市县三级“七普”人口数据分享》一文中&#xff0c;为你分享过全国人口数据。 现在再为你分享全球1km分辨率人口分布栅格数据&#xff0c;你可以在文末查看该数据的领取方法。 全球1km分辨率人口分布 人口空间分布数据是在各项研究中经常使用的数据&#xff0…