一、主要功能
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");
用键值对的方式可以取出这个值。