Prism之對話服務(DialogService)


對話服務(DialogService)概述

對話框實際上是我們應用程序經常用到的一個功能, 類如: Show、ShowDialog。
可以彈出一個我們指定的窗口, 僅此而已, 那么在Prism當中, Dialog指的是什么?

Prism提供了一組對話服務, 封裝了常用的對話框組件的功能, 例如:

  • RegisterDialog/IDialogService (注冊對話及使用對話)
  • 打開對話框傳遞參數/關閉對話框返回參數
  • 回調通知對話結果

對話服務使用過程

1、創建Dialog

大體與導航類似,創建視圖-->創建視圖模型VM-->編寫配置文件(使用模塊才需要)

不同的是在使用導航時在VM中繼承的是INavigationAwareIConfirmNavigationRequest,在使用對話時則繼承IDialogAware

image-20210818224924631

如何注冊模塊使用模塊,本篇不再贅述,參考模塊用法即可

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")}");
                }
            });
        }

image-20210818231456663

先做一個簡單的判斷,看是否點擊了確定,然后如法炮制通過callback下的Parameters的GetValue獲取傳遞過來的參數,注意GetValue是一個泛型,必須指定參數

最終效果:

4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM