22WPF----Prism框架

1.关于Prism框架

     官网:Prism Library      文档可以参考

     源码地址:https://github.com/PrismLibrary/Prism

     版本8.1

     Prism框架10+历史、微软,最新版本使用

2、功能说明

    Prism提供了一组设计模式的实现,有助于编写结构良好的且可维护的XAML应用程序,包括MVVM、依赖注入、命令、事件聚合器

3Prism框架关键程序

      Prism.Core :实现MVVM的核心功能,属于一个与平台无关的项目【Prism.dll】

      Prism.Wpf:包含了DialogServiceRegionModuleNavigation,其他的一些WPF的功能 【Prism.Wpf.dll】

      Prism.UnityPrism.Unity.Wpf.dll Prism.DryIoc.Wpf.dll

4、获取Prism框架

      Prism.dll                     Prism.Core

      Prism.Wpf.dll              Prism.Wpf

      Prism.Unity.Wpf.dll     Prism.Unity

      Prism.DryIoc.Wpf.dll   Prism.DryIoc

注:引入Prism.Unity包含Prism.dll和Prism.Wpf.dll

5、基本数据绑定方式

继承BindableBase类

22WPF----Prism框架_第1张图片

、数据处理

ErrorsContainer

22WPF----Prism框架_第2张图片

22WPF----Prism框架_第3张图片

使用 

22WPF----Prism框架_第4张图片

效果

22WPF----Prism框架_第5张图片

7、命令状态检查

7.1基本命令

7.2 状态检查命令

第一种:利用BtnCheckCommand.RaiseCanExecuteChanged();进行触发检查过程

22WPF----Prism框架_第6张图片

 注:需要在属性中加入RaiseCanExecuteChanged()方法

22WPF----Prism框架_第7张图片

第二种:利用ObservesProperty进行属性的观察,当属性变化的时候进行状态检查

注:可以同时观察多个属性

第三种:通过ObservesCanExecute进行一个属性值的观察,进行动态的状态处理

22WPF----Prism框架_第8张图片

 7.3异步命令

        public ICommand BtnAsyncCommand { get => new DelegateCommand(DoExecute); }
        private async void DoExecute(object args)
        {
            await Task.Delay(3000);
            Value = 300;
        } 
  

7.4事件转命令

           
                
                    
                        
                    
                
                
                
                
                
                
            
        // 事件转命令
        public ICommand BtnEventCommand { get => new DelegateCommand(DoEventExecute); }
        private void DoEventExecute(object args)
        {
            Value = 300;
        } 
  

注意:要引入这个命令空间

        xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
        xmlns:prism="http://prismlibrary.com/"

 8、Prism框架初始化

8.1 PrismBootstrapper

第一步:通过NuGet引入Prism.Unity

第二步:创建对象

    public class Bootstrapper : PrismBootstrapper
    {
        //返回一个主窗口
        protected override DependencyObject CreateShell()
        {
            //创建一个MainWindow的实例,进行窗口显示
            return Container.Resolve();
        }
        //注册一些类型
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
           
        }
    }

第三步:注释掉默认的启动路径


    
    
         
    

第四步:调用

    public partial class App : Application
    {
        public App()
        {
            new Bootstrapper().Run();
        }
    }

8.2 PrismApplication

第一步:

22WPF----Prism框架_第9张图片

    注:加上 xmlns:prism="http://prismlibrary.com/" 

第二步:

 22WPF----Prism框架_第10张图片

22WPF----Prism框架_第11张图片

 8.3 ViewModelLocator

帮助进行ViewViewModel的绑定

22WPF----Prism框架_第12张图片

 22WPF----Prism框架_第13张图片

 22WPF----Prism框架_第14张图片

 注:

        - ViewModel与视图类型位于同一个程序集中

        - ViewModel位于.ViewModelsViewModel)子命名空间中

        - View位于.ViewsView)子命名空间中

        - ViewModel名称与视图名称对应,以“ViewModel结尾

9.ViewModelLocator匹配规则

9.1更改命名约定

WPFPrismViewModelLocaltor.Views.MainWindow

WPFPrismViewModelLocaltor.ViewModels.MainWindowViewModel

22WPF----Prism框架_第15张图片

9.2解析匹配规则

本质上是将视图View的命名空间改成和Model一致

22WPF----Prism框架_第16张图片

 9.3三不搭匹配

1、可能不在一个程序集    2、对象不在指定的目录    3、名称不匹配

22WPF----Prism框架_第17张图片

10.IOC容器与依赖注入

 定义接口和接口实现类

22WPF----Prism框架_第18张图片

 IoC容器的对象注册

22WPF----Prism框架_第19张图片

 在ViewModel中拿到该接口对象

22WPF----Prism框架_第20张图片

 11.事件聚合器

22WPF----Prism框架_第21张图片

 22WPF----Prism框架_第22张图片

 22WPF----Prism框架_第23张图片

  同样在ViewModel中也能订阅事件22WPF----Prism框架_第24张图片

 订阅处理线程

 22WPF----Prism框架_第25张图片

 22WPF----Prism框架_第26张图片

 订阅事件过滤

22WPF----Prism框架_第27张图片

12.Dialog子窗口处理

IDialogService-逻辑注入

IDialogAware-实现

IDialogWindow

22WPF----Prism框架_第28张图片

第一步:新建用户控件

第二步:创建ViewModel,继承IDialogAware接口

22WPF----Prism框架_第29张图片

第三步: 注册一个Dialog

 22WPF----Prism框架_第30张图片

 第四步:注入逻辑

22WPF----Prism框架_第31张图片

22WPF----Prism框架_第32张图片

13.自定义Dialog父窗口

第一步:创建父窗口,实现IDialogWindow接口

22WPF----Prism框架_第33张图片

 第二步:注册窗口

22WPF----Prism框架_第34张图片

 第三步:弹出窗口

22WPF----Prism框架_第35张图片

 22WPF----Prism框架_第36张图片

 添加win2窗口

22WPF----Prism框架_第37张图片

 22WPF----Prism框架_第38张图片

 ShowDialog()第二个参数

22WPF----Prism框架_第39张图片

 22WPF----Prism框架_第40张图片

Dialog传参和回调的一个过程

22WPF----Prism框架_第41张图片

 22WPF----Prism框架_第42张图片

14.Region基本定义

1ShellRegion

     Region的作用:确定功能区域;确保交互页面的内容更新

2Region的注册:

      - ContentControlRegionAdapter

      - ItemsControlRegionAdapter

      - SelectorRegionAdapter

      - TabControlRegionAdapter

      - 自定义Region

 3、Region与Navigation

      - 基本导航过程(3种方式)

      - 导航生命周期

      - 导航确认

      - 导航传参

      - 导航日志

22WPF----Prism框架_第43张图片

22WPF----Prism框架_第44张图片

 22WPF----Prism框架_第45张图片

22WPF----Prism框架_第46张图片

15.自定义Region 

 22WPF----Prism框架_第47张图片

 

 ResizeMode=“NoResize”  去掉最下最大按钮

16.Region常用导航方式

22WPF----Prism框架_第48张图片

 22WPF----Prism框架_第49张图片

22WPF----Prism框架_第50张图片22WPF----Prism框架_第51张图片 

 22WPF----Prism框架_第52张图片

 22WPF----Prism框架_第53张图片

17.导航参数 

22WPF----Prism框架_第54张图片

 22WPF----Prism框架_第55张图片

 22WPF----Prism框架_第56张图片

 22WPF----Prism框架_第57张图片

  当从B导航到A时候,可以直接到达,当A导航到B时候,进入ViewModel的ConfirmNavigationRequest方法,从而控制是不是可以继续导航到B

参数传递

主视图

22WPF----Prism框架_第58张图片

  22WPF----Prism框架_第59张图片

 18.导航日志

22WPF----Prism框架_第60张图片

 19.复合命令

CompositeCommand

19.1单个视图中使用

22WPF----Prism框架_第61张图片

 19.2多个视图中使用

创建接口

22WPF----Prism框架_第62张图片

 实现接口

22WPF----Prism框架_第63张图片

 注册全局复合命令

22WPF----Prism框架_第64张图片

 在视图A、B中分别注册子命令

22WPF----Prism框架_第65张图片

 22WPF----Prism框架_第66张图片

 在主视图中调用

22WPF----Prism框架_第67张图片

 22WPF----Prism框架_第68张图片

20.模块化管理Moudule

添加WPF用户控件库

添加对应的Views

 添加Prism.Unity引用

添加一个继承IModule接口

22WPF----Prism框架_第69张图片

 在主模块中注册子模块

22WPF----Prism框架_第70张图片

22WPF----Prism框架_第71张图片第三种方式

 22WPF----Prism框架_第72张图片

 22WPF----Prism框架_第73张图片

 第四种使用配置文件

 22WPF----Prism框架_第74张图片

 在子模块中注册视图

22WPF----Prism框架_第75张图片

 总结

22WPF----Prism框架_第76张图片

按需加载子模块

22WPF----Prism框架_第77张图片

 22WPF----Prism框架_第78张图片

 通过XML文件加载子模块

22WPF----Prism框架_第79张图片

 22WPF----Prism框架_第80张图片

扫描当前运行子目录

 22WPF----Prism框架_第81张图片

窗口切换时 ,是否激活

22WPF----Prism框架_第82张图片

 22WPF----Prism框架_第83张图片

你可能感兴趣的:(wpf)