Prism-对话服务

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

示例如下

新增一个用Prism-对话服务_第1张图片户控件ViewC

简单设计了一个弹窗

然后在ModelAProfile类里注册弹窗

containerRegistry.RegisterForNavigation();

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

还有他的方法

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

private readonly IDialogService dialogService;

        public DelegateCommand OpenCommand { get; private set; }
        
        public ViewModel(IDialogService dialogService)
        {
           
            OpenCommand = new DelegateCommand(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("Value");
               }//接受结果
           } );
        }

接收这个参数 

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

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

再跟ViewC进行上下文绑定

containerRegistry.RegisterForNavigation();

两个按钮进行绑定 

 
            

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 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("Title");//接收到这个参数
        }
    }
}

主业务代码中的ViewModels的代码 

namespace Prism.viweModels
{
    public class ViewModel : BindableBase
    {
        private readonly IDialogService dialogService;

        public DelegateCommand OpenCommand { get; private set; }
        
        public ViewModel(IDialogService dialogService)
        {
           
            OpenCommand = new DelegateCommand(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("Value");
               }//接受结果
           } );
        }

    }
}

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

 Prism-对话服务_第2张图片

 

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

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

你可能感兴趣的:(c#)