当我们点击某些按钮 弹出弹窗 有某些我们想要的功能进行选择 这就是基本的对话服务

示例如下

新增一个用户控件ViewC

简单设计了一个弹窗

然后在ModelAProfile类里注册弹窗

containerRegistry.RegisterForNavigation<ViewC>();

把之前用的regionManager区域管理器两行代码删掉

还有他的方法

在ViewModels里面使用prism中的对话服务IDialog service 然后创建字段

private readonly IDialogService dialogService;public DelegateCommand<string> OpenCommand { get; private set; }public ViewModel(IDialogService dialogService){OpenCommand = new DelegateCommand<string>(Open);this.dialogService = dialogService;}
private void Open(string obj){DialogParameters keys = new DialogParameters();keys.Add("Title", " 测试弹窗");dialogService.ShowDialog(obj,keys,callback=>{//回调结果if (callback.Result == ButtonResult.OK){string result = callback.Parameters.GetValue<string>("Value");}//接受结果} );}

接收这个参数

 public void OnDialogOpened(IDialogParameters parameters){Title = parameters.GetValue<string>("Title");//接收到这个参数}

在ViewModel里面创建ViewCViewModel创建一个继承于IDialogAware的类 然后实现这个接口的方法

再跟ViewC进行上下文绑定

containerRegistry.RegisterForNavigation<ViewC, ViewAViewModel>();

两个按钮进行绑定

 <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="10"Grid.Row="2"><Button Content="取消" Height="50" Width="100" Margin="10"FontSize="30"Command="{Binding CancelCommand}"/><Button Content="确定"Command="{Binding SaveCommand}"Height="50"Width="100"FontSize="30"Margin="10"/></StackPanel>

ModelA的整段代码

namespace ModuleA
{public class ViewCViewModel : IDialogAware{//给按钮加功能//取消命令public DelegateCommand CancelCommand { get; set; } //保存命令public DelegateCommand SaveCommand { get; set; }public ViewCViewModel(){CancelCommand = new DelegateCommand(Cancel);SaveCommand = new DelegateCommand(Save);}private void Save(){OnDialogClosed();}private void Cancel(){RequestClose?.Invoke(new DialogResult(ButtonResult.No));}public string Title { get; set; }public event Action<IDialogResult> RequestClose;//请求关闭public bool CanCloseDialog()//允许关闭{return true;}public void OnDialogClosed(){DialogParameters keys = new DialogParameters();keys.Add("Vaule", "Hello");//返回的结果,名字为Value的变量 值为hello RequestClose?.Invoke(new DialogResult(ButtonResult.OK, keys));//调用Invoke来确定对话中按钮结果的实现 确定即发生}public void OnDialogOpened(IDialogParameters parameters){Title = parameters.GetValue<string>("Title");//接收到这个参数}}
}

主业务代码中的ViewModels的代码

namespace Prism.viweModels
{public class ViewModel : BindableBase{private readonly IDialogService dialogService;public DelegateCommand<string> OpenCommand { get; private set; }public ViewModel(IDialogService dialogService){OpenCommand = new DelegateCommand<string>(Open);this.dialogService = dialogService;}private void Open(string obj){DialogParameters keys = new DialogParameters();keys.Add("Title", " 测试弹窗");dialogService.ShowDialog(obj,keys,callback=>{//回调结果if (callback.Result == ButtonResult.OK){string result = callback.Parameters.GetValue<string>("Value");}//接受结果} );}}
}

实现结果 确定得到一个叫做Vaule的变量 值为string类型的hello

对话服务要与整个业务代码毫无关系,都是使用依赖注入来实现功能

降低程序模块之间的耦合性

Prism-对话服务相关推荐

  1. 今天来聊一聊情感对话服务机器人

    随着人工智能技术的不断进步和应用,情感对话服务机器人成为了一种新型的人机交互方式.情感对话服务机器人可以实现基于自然语言处理技术的智能交互,让计算机更加接近人类的思维和行为模式.在本文中,我们将探讨情 ...

  2. Prism:Uber 的 Presto 查询网关服务

    本文来自3月24日举办的 PrestoCon Day 2021.作者 Hitarth Trivedi,Uber 的软件工程师. Prism 是 Uber 所有 Presto 查询的网关服务(gatew ...

  3. WPF Prism.DryIoc(4)

    当前介绍的是prism Dryloc中的对话服务 能在程序中调用窗体弹窗最大程度的降低程序和视图之间的偶和性 步骤1 在Nuget包管理中下载Prism Dryloc 包 步骤2 在App.cs中设置 ...

  4. 【WPF】Prism框架基础

    Prism框架: 初识: 我们创建一个基于net5.0的WPF应用程序 创建完之后在VS里面添加相关的包 修改app继承的基类 public partial class App : PrismAppl ...

  5. audio 小程序 放大_码code | 小程序新能力释放,人人都能拥有对话机器人

    当用户在小程序内发起对话,你是在后台抓紧安排人工回复吗? 由于等待回复时间过长,用户产生不满并弃用了你的小程序. "秒回"是对话的基本要求,及时回复才能给到用户尊重和被重视感.然而 ...

  6. 为新研究准备好一块用武之地:最全任务型对话数据调研

    合适的数据集或者语料是优秀的自然语言研究工作的基础,然而找寻合适的数据集通常是一件耗时耗力的工作.这时候一份优质的数据集汇总就能帮助科研人员,在研究开始的时候事半功倍.这篇文章就向你介绍一份优质的数据 ...

  7. 如何打造“智能助理”?阿里对话开发平台这样做

    简介: 一个合格的智能助理能够帮你预约开会时间,处理日常办公需求,还能打电话提醒你要还信用卡了,作为用户或者消费者,我们已经越来越习惯对话机器人提供的各色服务.但对于企业来讲,搭建提供这些服务的对话机 ...

  8. 最新任务型对话数据集大全

    合适的数据集或者语料是优秀的自然语言研究工作的基础,然而找寻合适的数据集通常是一件耗时耗力的工作.这时候一份优质的数据集汇总就能帮助科研人员,在研究开始的时候事半功倍.这篇文章就向你介绍一份优质的数据 ...

  9. javaee 中文帮助文档_从中游公司跳槽阿里必知:K8s、Nginx、Redis、微服务面试文档...

    前言 随着时代的进步和发展,无论哪份工作都不能因循守旧,不去创新或者去吸收新的知识,尤其是Java开发的工作者,在十几年之前,很多人都已经掌握了Java的很多知识,但是如今如果只会SSM的小伙伴,已经 ...

最新文章

  1. C++11中std::lock_guard的使用
  2. [Google Guava] 使用和避免null
  3. linux 挂载有数据硬盘分区,linux下磁盘分区、挂载知多少
  4. linux ftp用户指定多个目录,linux ftp服务器下用户限制目录的方法
  5. css根据屏幕大小切换样式
  6. WINDOWS下DOCKER安装后卡在boot2docker.iso无法启动
  7. python 邮箱验证_在Django中进行用户注册和邮箱验证的方法
  8. android游戏开发方向初探
  9. SysCeo_Win7_Classic_V7.8_32位+64位(6in1)纯净经典版
  10. 霍尔编码器原理及测速--PID—arduino
  11. java中 是什么意思_java中?:是什么意思
  12. Nice UI - Hacked.io
  13. 手机老是收不到短信验证码?我来告诉你为什么!
  14. android仿支付宝弹窗,实现支付宝支付从底部弹窗效果
  15. JSON字符串--对象之间的相关转换
  16. 电机编码器调零步骤_什么是调零对位?伺服电机编码器调零对位方法
  17. IQOO换鸿蒙系统,1998 iQOO 845版明天发?| 华为自研系统鸿蒙在全球注册商标
  18. Windows更新策略配置
  19. 大学生开学需要准备哪些数码产品、五款大学生必买的电子产品
  20. MATE9系统升级提示服务器,华为Mate9用ADB调试功能禁用系统更新去右上角提示更新的数字角标1...

热门文章

  1. 计算机毕业设计springboot进口零食销售网站74r3o源码+系统+程序+lw文档+部署
  2. 微信JSSDK使用(获取access_token和jsapi_ticket及后续的完整方法)
  3. java与前端的区别_java与前端的区别
  4. linux打压缩包去掉某个文件夹,linux tar压缩排除某个文件夹的方法
  5. python通过经纬度算出距离_Python中如何利用经纬度进行距离计算
  6. php编程日均增长率计算,2018年事业单位职业测重要知识点:年均增长率的计算...
  7. 手机地图哪个好?从老虎地图说开去(转帖)
  8. 适合学生自我提升的10个好网站,建议收藏
  9. be备份ad_AD域控的备份及还原
  10. Python实验1 流程控制