對話服務(DialogService)概述
對話框實際上是我們應用程序經常用到的一個功能, 類如: Show、ShowDialog。
可以彈出一個我們指定的窗口, 僅此而已, 那么在Prism當中, Dialog指的是什么?
Prism提供了一組對話服務, 封裝了常用的對話框組件的功能, 例如:
- RegisterDialog/IDialogService (注冊對話及使用對話)
- 打開對話框傳遞參數/關閉對話框返回參數
- 回調通知對話結果
對話服務使用過程
1、創建Dialog
大體與導航類似,創建視圖-->創建視圖模型VM-->編寫配置文件(使用模塊才需要)
不同的是在使用導航時在VM中繼承的是INavigationAware
或IConfirmNavigationRequest
,在使用對話時則繼承IDialogAware
如何注冊模塊使用模塊,本篇不再贅述,參考模塊用法即可
2、在主模塊中定義一個按鈕用於打開這個對話框
Tips:這里需要依賴注入一個IDialogService
private readonly IDialogService _dialogService;
public MainWindowViewModel(IRegionManager regionManager,IDialogService dialogAware)
{
_regionManage = regionManager;
_dialogService = dialogAware;
OpenDialogCommand = new DelegateCommand<string>(OpenDialog);
}
3、實現打開對話框命令的方法
private void OpenDialog(string obj)
{
DialogParameters pairs = new DialogParameters
{
{ "Title", "我是標題" }
};
_dialogService.ShowDialog("DialogView", pairs,callback=> {
});
}
可使用DialogParameters傳遞參數到對話框中
4、實現對話框視圖的VM
OnDialogOpened方法:當對話框被創建時則立即進入該方法,並會接收到傳遞過來的參數
public void OnDialogOpened(IDialogParameters parameters)
{
Title = parameters.GetValue<string>("Title");
}
OnDialogClosed方法:當確定后會被觸發,可以在這里將對話框上的內容通過這里傳遞回去
public void OnDialogClosed()
{
DialogParameters pairs = new DialogParameters
{
{ "Parameters1", Parameters1 },
{ "Parameters2", Parameters2 }
};
RequestClose?.Invoke(new DialogResult(ButtonResult.OK, pairs));
}
這里與打開對話框一樣都是使用DialogParameters以鍵值對的形式保存參數
通過調用RequestClose委托返回結果
CanCloseDialog方法:表示是否可以關閉,一般直接返回True就可以了,具體視業務情況了,需要返回一個布爾值
5、最后在ShowDialog那里處理返回結果回調
private void OpenDialog(string obj)
{
DialogParameters pairs = new DialogParameters
{
{ "Title", "我是標題" }
};
_dialogService.ShowDialog("DialogView", pairs,callback=> {
if (callback.Result==ButtonResult.OK)
{
MessageBox.Show($"參數1:{callback.Parameters.GetValue<string>("Parameters1")}\r\n" +
$"參數2:{callback.Parameters.GetValue<string>("Parameters2")}");
}
});
}
先做一個簡單的判斷,看是否點擊了確定,然后如法炮制通過callback下的Parameters的GetValue獲取傳遞過來的參數,注意GetValue是一個泛型,必須指定參數
最終效果: