当前介绍的是prism Dryloc中的对话服务

能在程序中调用窗体弹窗最大程度的降低程序和视图之间的偶和性

步骤1 在Nuget包管理中下载Prism Dryloc 包

步骤2 在App.cs中设置如下

using Prism.DryIoc;
using Prism.Ioc;
using System.Windows;
namespace WpfApp1
{public partial class App : PrismApplication{protected override Window CreateShell(){//返回 其MainWindow 窗体 效果启动程序return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){//注册窗体containerRegistry.RegisterForNavigation<MainWindow,MainVM>();//指定 mainwindows的上下文 containerRegistry.RegisterDialog<ob1, ob1VM> ("A");//取名为A}}
}

步骤3 在主界面Xaml中做好布局显示,在主界面上设置打开弹窗的按钮button 设置主界面的上下文,做好绑定command 在构造函数声明参数 IRegionManager ,IDialogService 创建字段并赋值 其主界面的VM为MainVM 主界面为MainWindow 代码和Xaml如下

IRegionManager 命名空间为 usingPrism.Regions;

MainWindow绑定的上下文代码

using Prism.Commands;
using Prism.Mvvm;
using System.Windows.Input;
using Prism.Regions;
using Prism.Services.Dialogs;
using System.Windows;namespace WpfApp1
{public class MainVM:BindableBase{public MainVM(IRegionManager regionAdapter,IDialogService service){RegionAdapter = regionAdapter;Service = service;}public ICommand Open { get => new DelegateCommand<string>((p) => {//RegionAdapter.Regions["x"].RequestNavigate(p);//普通 跳转用户控件 //x是刚显示的名称//实现弹窗显示 //我们在打开弹窗的时候就 传递参数过去DialogParameters keyValuePairs = new DialogParameters() { { "Title", "Value" } };Service.ShowDialog(p, keyValuePairs, callback => {if (callback.Result == ButtonResult.Yes)//程序在invoke 了会第一时间来到这判断{var p=   callback.Parameters.GetValue<string>("Value"); //想获得刚刚传递的参数  MessageBox.Show("蟹蟹yes");}else MessageBox.Show("NO");});}); }public IRegionManager RegionAdapter { get; }public IDialogService Service { get; }}
}

MainWindow 前端Xaml

<Windowx:Class="WpfApp1.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:local="clr-namespace:WpfApp1"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:prism="http://prismlibrary.com/"Title="MainWindow"Width="800"Height="450"mc:Ignorable="d"><Grid><!--  设计  --><Grid.RowDefinitions><RowDefinition Height="auto" /><RowDefinition /></Grid.RowDefinitions><ButtonWidth="50"Height="40"Command="{Binding Open}"CommandParameter="A"Content="打开弹窗" /><!--  x为容器名字  --><ContentControl Grid.Row="1" prism:RegionManager.RegionName="x" /></Grid>
</Window>

步骤4 创建被弹窗的用户控件 (window窗体不行)在用户控件所绑定的上下文类必须继承接口IDialogAware 命名空间 为 using Prism.Services.Dialogs; 其创建的弹窗代码和xaml布局代码如下

<UserControlx:Class="WpfApp1.ob1"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:local="clr-namespace:WpfApp1"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"d:DesignHeight="450"d:DesignWidth="800"Background="Orange"mc:Ignorable="d"><!--  写点用户交互  --><Grid ><StackPanel Orientation="Horizontal"><Button Content="确定" Width="150" Command="{Binding save}" Height="20"/><Button Content="取消" Width="150" Height="20" Command="{Binding quxiao}"/></StackPanel></Grid>
</UserControl>

被创建的用户控件弹窗视图如下

using Prism.Commands;
using Prism.Services.Dialogs;
using System;
using System.Windows.Input;
namespace WpfApp1
{public class ob1VM : IDialogAware{public string Title { get; set; }public event Action<IDialogResult> RequestClose;public  ICommand save { get => new DelegateCommand(() => {RequestClose.Invoke(new DialogResult(ButtonResult.Yes, new DialogParameters() { { "Value", "选中的yes" } }));}); }public ICommand quxiao{get => new DelegateCommand(() => {RequestClose.Invoke(new DialogResult(ButtonResult.No, new DialogParameters() { { "Value", "选中的NO" } }));});}public bool CanCloseDialog(){return true;//能否关闭窗体}public void OnDialogClosed(){}public void OnDialogOpened(IDialogParameters parameters){//parameters 接收参数var o= parameters.GetValue<string>("Title");//键值对//o 传递过来的参数}}
}

实现效果就是:能在程序中调用窗体弹窗最大程度的降低程序和视图之间的偶和性

WPF Prism.DryIoc(4)相关推荐

  1. Prism框架(一)——概述Prism框架的设计目的是用来帮助构建丰富、灵活、易维护的WPF和Si...

    Si Prism框架(一)--概述Prism框架的设计目的是用来帮助构建丰富.灵活.易维护的WPF和Si 提问者:mfksnr120(ID:187460) | 悬赏 0.0 希赛币 | 回答数:0 | ...

  2. WPF学习拾遗(二)TextBlock换行

    原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...

  3. “WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心

    2019独角兽企业重金招聘Python工程师标准>>> 近日微软公布了最新的WPF路线图,一片热议:对于老牌控件提供商葡萄城来说,这是WPF系列控件一个重要的机遇,因此,Spread ...

  4. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  5. WPF入门教程(七)---依赖属性(3)(转)

    WPF入门教程(七)---依赖属性(3) 2018年08月24日 08:33:43 weixin_38029882 阅读数:50 四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装 ...

  6. WPF学习笔记(7):DataGrid中数字自定义格式显示

    WPF学习笔记(7):DataGrid中数字自定义格式显示 原文:WPF学习笔记(7):DataGrid中数字自定义格式显示 DataGrid中数据显示如下图,数据格式比较杂乱.希望达到以下要求:(1 ...

  7. WPF老矣,尚能饭否——且说说WPF今生未来(中):策略

    本文接上文<WPF老矣,尚能饭否--且说说WPF今生未来(上):担心>继续. "上篇"中部分精彩的点评: 虽然WPF不再更新了,但是基于WPF的技术还是在发展着,就比如 ...

  8. WPF 入门教程(一)

    WPF 入门教程(一) 1.布局规则 1.WPF 窗体中,一个窗体只能持有一个空间,当需要展示多个控件时,则需要首先设置一个容器控件(Container).控件的布局有容器来决定. 2.控件应避免明确 ...

  9. WPF翻牌连连看(一)

    WPF翻牌连连看(一) 设计界面: Mybutton.cs代码: using System; using System.Collections.Generic; using System.Linq; ...

最新文章

  1. 声速的测量的实验原理和应用_声速的测定实验报告心得体会
  2. 346个基因组可视化工具一网打进!
  3. 手机下载Python_将安卓手机打造成 Python 全栈开发利器
  4. css3中插入地图,CSS3 地图展开动画
  5. 数据结构和算法——线性结构(2)循环链表和双向循环链表
  6. java模拟网银登录_Java模拟网上银行业务
  7. Java初学练手,一款汽车车牌号生成小工具
  8. Linux学习笔记(一):Linux介绍
  9. std::numeric_limits的一个使用注意事项
  10. HTML网页设计制作大作业(div+css) ~ 中华美德6页面带音乐 ~ 学生网页设计作业源码(中华文化)
  11. Mysql 免安装版本
  12. 武林传奇之七剑下天山java游戏开发商_武林传奇2 之七剑下天山的配方
  13. 癸卯年新春贺文 --孤羽江绎
  14. WebSocket在Client的基本使用
  15. window下查看TCP端口连接情况:netstat -ano -p tcp|findstr 10001
  16. python一键安装框架_《自拍教程76》Python 一键批量安装第三方包
  17. 深度剖析apachepdf下载_软件定义汽车趋势下的供应链趋势(17页可下载)
  18. 哈夫曼算法以及求哈夫曼编码
  19. 关于MediaCode播放H265/hevc的总结
  20. Microsoft sql server 获取系统当前日期(时间)

热门文章

  1. 哪些骨传导运动蓝牙耳机好,分享几款不错的骨传导耳机
  2. 中国云数据库进入高速发展期,阿里云占据42.5%的市场份额
  3. excel上传下载 Content-type
  4. 二分法(Bisection)与牛顿法(Newton)求方程的根
  5. 摩尔纹的原理与产生条件(写的较好)
  6. web 设计 暑期课笔记 Ⅱ CRAP设计理论
  7. 离线安装 E: Failed to fetch http://archive.ubuntu.com/ubuntu/xxxx Connection failed [IP: 91.189.88.152]
  8. AFL——American Fuzzy Lop的基础使用
  9. RNN在图像压缩领域的应用-Variable rate image compression with recurrent neural networks
  10. 多元函数求极值中的a_第八节多元函数的极值及其求法.ppt