[Prism] Dialog服务

一、主要功能

        prism的Dialog服务主要提供的功能就是对原有的Dialog服务进行一个改进,提供参数传递和回调函数的功能。这个框架的功能也仅仅在需要用到Dialog(弹出窗口)的时候用到。(记住,这个仅仅是在需要弹出窗口的时候用到)。

二、构建过程

        基于Prism的MVVM绑定模式,分别构造相应的view和viewmodel。例如 MesView和MesViewModel。然后在App类中的RegisterTypes方法中进行注册。构建一个依赖注入关系。       

containerRegistry.RegisterDialog<MesView, MesViewModel>();

然后绑定MVVM的DataContext,MesViewModel需要实现接口 IDialogAware才能使用Dialog服务

    internal class MesViewModel : BindableBase, IDialogAware
    {
        public string Title => throw new NotImplementedException();

        public event Action<IDialogResult> RequestClose;

        public bool CanCloseDialog()
        {
            throw new NotImplementedException();
        }

        public void OnDialogClosed()
        {
            throw new NotImplementedException();
        }

        public void OnDialogOpened(IDialogParameters parameters)
        {
            throw new NotImplementedException();
        }
    }

这个是接口中需要实现的方法和属性。

        OnDialogOpened  在窗口打开时执行的函数,可以传递参数,参数是DialogParameter 的形式的。

        OnDialogClosed  在窗口关闭时执行的函数,

        CanCloseDialog  返回一个bool值,return true;

        RequestClose 委托是退出Dialog是调用的。可以在执行的时候传递参数。不管传递什么参数,这个委托都是退出Dialog的。

                DialogParameters temp = new DialogParameters();
                temp.Add("Key2", Title);
                RequestClose?.Invoke(new DialogResult(ButtonResult.OK,temp));

                RequestClose?.Invoke(new DialogResult(ButtonResult.No, null));

这里展示了,退出时传递参数的用法。还是以键值对的形式传递参数。

三、调用Dialog

        在调用Dialog的类中,添加属性:

        public IDialogService dialogService { get; set; }

然后在该类的构造函数中初始化,其中构造函数添加 IDialogService dialogServiceTemp的虚参,不用提供对应的实参。

        在对应的打开Dialog的DelegatCommmand中调用 ShowDialog方法:

                dialogService.ShowDialog("MesView",para, arg =>
                {
                    if(arg.Result==ButtonResult.OK)
                    {
                        string str = arg.Parameters.GetValue<string>("Key2");
                        MessageBox.Show(str);
                    }
                    else
                    {
                        MessageBox.Show("Cancel");
                    }
                }); 

该方法可以向dialog内部传递一个参数,同时可以构造一个回调方法,该回调方法会在退出Dialog的时候执行,既最后进行执行。

        arg是一个IDialogResult类型的变量,也就是RequestClose执行的时候传进去的虚参。

四、Dialog  Result传递

        Dialog.Result是在调用RequestClose?.Invoke的时候传递的,如果选择的是ButtonResult.OK,那么这个DialogResult也会是ButtonResult.OK。

五、参数的传进传出

        首先参数从外部传进去Dialog中,在  dialogService.ShowDialog("MesView",para, arg =>())这个方法中就传进去了。参数以DialogParameters的类型传输

        参数传出去的话,在RequestClose?.Invoke(new DialogResult(ButtonResult.OK,temp))调用这个函数可以添加一个DialogResult的参数,这个参数就是ShowDialog方法获取到的arg参数。、

string str = arg.Parameters.GetValue<string>("Key2");

用键值对的方式可以取出这个值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值