官网:Prism Library 文档可以参考
源码地址:https://github.com/PrismLibrary/Prism
版本8.1
Prism框架10+历史、微软,最新版本使用
Prism提供了一组设计模式的实现,有助于编写结构良好的且可维护的XAML应用程序,包括MVVM、依赖注入、命令、事件聚合器
Prism.Core :实现MVVM的核心功能,属于一个与平台无关的项目【Prism.dll】
Prism.Wpf:包含了DialogService、Region、Module、Navigation,其他的一些WPF的功能 【Prism.Wpf.dll】
Prism.Unity:Prism.Unity.Wpf.dll、 Prism.DryIoc.Wpf.dll
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
继承BindableBase类
ErrorsContainer
使用
效果
7.1基本命令
7.2 状态检查命令
第一种:利用BtnCheckCommand.RaiseCanExecuteChanged();进行触发检查过程
注:需要在属性中加入RaiseCanExecuteChanged()方法
第二种:利用ObservesProperty进行属性的观察,当属性变化的时候进行状态检查
注:可以同时观察多个属性
第三种:通过ObservesCanExecute进行一个属性值的观察,进行动态的状态处理
7.3异步命令
public ICommand BtnAsyncCommand { get => new DelegateCommand
7.4事件转命令
// 事件转命令
public ICommand BtnEventCommand { get => new DelegateCommand
注意:要引入这个命令空间
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:prism="http://prismlibrary.com/"
第一步:通过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();
}
}
第一步:
注:加上 xmlns:prism="http://prismlibrary.com/"
第二步:
帮助进行View与ViewModel的绑定
注:
- ViewModel与视图类型位于同一个程序集中
- ViewModel位于.ViewModels(ViewModel)子命名空间中
- View位于.Views(View)子命名空间中
- ViewModel名称与视图名称对应,以“ViewModel”结尾
9.1更改命名约定
WPFPrismViewModelLocaltor.Views.MainWindow
WPFPrismViewModelLocaltor.ViewModels.MainWindowViewModel
9.2解析匹配规则
本质上是将视图View的命名空间改成和Model一致
9.3三不搭匹配
1、可能不在一个程序集 2、对象不在指定的目录 3、名称不匹配
定义接口和接口实现类
IoC容器的对象注册
在ViewModel中拿到该接口对象
订阅处理线程
订阅事件过滤
IDialogService-逻辑注入
IDialogAware-实现
IDialogWindow
第一步:新建用户控件
第二步:创建ViewModel,继承IDialogAware接口
第三步: 注册一个Dialog
第四步:注入逻辑
第一步:创建父窗口,实现IDialogWindow接口
第二步:注册窗口
第三步:弹出窗口
添加win2窗口
ShowDialog()第二个参数
Dialog传参和回调的一个过程
1、Shell与Region
Region的作用:确定功能区域;确保交互页面的内容更新
2、Region的注册:
- ContentControlRegionAdapter
- ItemsControlRegionAdapter
- SelectorRegionAdapter
- TabControlRegionAdapter
- 自定义Region
3、Region与Navigation
- 基本导航过程(3种方式)
- 导航生命周期
- 导航确认
- 导航传参
- 导航日志
ResizeMode=“NoResize” 去掉最下最大按钮
当从B导航到A时候,可以直接到达,当A导航到B时候,进入ViewModel的ConfirmNavigationRequest方法,从而控制是不是可以继续导航到B
参数传递
主视图
CompositeCommand
创建接口
实现接口
注册全局复合命令
在视图A、B中分别注册子命令
在主视图中调用
添加WPF用户控件库
添加对应的Views
添加Prism.Unity引用
添加一个继承IModule接口
在主模块中注册子模块
第四种使用配置文件
在子模块中注册视图
总结
按需加载子模块
通过XML文件加载子模块
扫描当前运行子目录
窗口切换时 ,是否激活