JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法,这个系列的文章旨在记录工作中使用WPF开发新的医疗项目中,有感于必须统一掉一些规范上的事情,并且提高团队开发效率,遂折腾了这么一个半吊子的框架,这个标题WPF企业级开发框架搭建指南,2020从入门到放弃可能会唬住一些人,但看到这些零碎文字的朋友就凑和着看吧,如果能帮助到你,那也荣幸了。
继上一篇烂尾文章分享了一些WPF数据验证的话题,这一篇来说一下ViewModel相互传参的问题,这也是在搭建JHRS开发框架中遇到的一些问题,并把它封装了一下。
这个演示的WPF开发管理系统的框架是基于MVVM来搭建的,因此业务处理都是在ViewModel里面完成的,而在实际项目中,难免会有两个页面(Page)跳来跳去的,它们在跳来跳去的时候是需要传递参数的,因为在这个框架中引入了Prism,事情就变更加的简单了。为了方便描述呢,本文就将模态窗口称为弹框页面了。
ViewModel相互传参
常见的业务场景就是在管理页列页面中,点击表格里面(DataGrid)某一行数据的编辑按钮,进行编辑,这时就会跳转到另外一个页面或者使用模态窗口打开一个弹框页面,在这个页面上进行编辑操作,在跳转的时候就会将参数进行传递,不然怎么在新开的页面知道你要干嘛呢?
在ViewModel相互传参的时候,可以使用对象的方式,也可以使用基本类型进行传递;因为在BaseViewModel这个基类中提供了打开弹框(模态窗口)窗体的功能,并且提供了一个object对象,参数为args的可选参数,可用于传参,代码如下:
/// <summary>
/// 打开模态窗口
/// </summary>
/// <param name="page">内容页面</param>
/// <param name="icon">图标</param>
/// <param name="pageTitle">页面标题</param>
/// <param name="args">页面传参</param>
/// <param name="callback">关闭窗体后执行的回调函数</param>
/// <param name="disableArea">是否禁用弹框页面的保存,取消区域(即隐藏保存,取消按钮)</param>
protected void ShowDialog(string page, IconEnum icon, string pageTitle = "未设置标题", object args = null, Action<IDialogResult> callback = null, bool disableArea = false)
{
IDialogWindow