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

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.kler.cn/a/282095.html

相关文章:

  • 智能指针原理、使用和实现——C++11新特性(三)
  • 经验笔记:Git 基础操作指南
  • STM32完全学习——使用标准库点亮LED
  • 模糊神经网络学习方法探讨
  • Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构
  • ARM 汇编指令
  • 2024 年顶级 Flutter UI 框架和库
  • JAVA基础之二-面向对象简述
  • UE5学习笔记16-游戏模式中的一些事件,如何改变网格体和摄像头的碰撞
  • MosaicML-面向生成式AI的机器学习平台
  • 仅利用一维数组实现等值线图效果(附完整代码)
  • TeamTalk消息服务器学习
  • Nuxt3入门:介绍、项目安装和了解视图(第一节)
  • 【Android】Glide模块工作原理
  • 2024最全网络安全工程师面试题(附答案),金九银十找工作必看!
  • CARLA Drone: 首个实现从不同空中视角进行单目3D目标检测,并提供数据集
  • 保证MQ的高可用性:RabbitMQ为例
  • 后端开发刷题 | 面试篇4
  • 合合信息acge模型获C-MTEB第一,文本向量化迎来新突破
  • Git 的基本使用
  • 【js】箭头函数和普通函数在this指向的区别
  • 深入理解DPO(Direct Preference Optimization)算法
  • MATLAB发票识别系统
  • 【Material-UI】Rating组件中的Rating precision属性
  • 31套科技风PPT模版免费下载
  • 电商云账户:空中分账场景的优势探索