導航
視頻教程地址
上一章回顧
1.注冊及使用導航、傳遞參數
2.INavigationAware接口作用及執行流程
3.IConfirmNavigationRequest接口作用及執行流程
4.IRegionNavigationJournal接口作用及執行流程
本章節將講解Prism當中的Dialog服務
什么是Dialog?
對話框實際上是我們應用程序經常用到的一個功能, 類如: Show、ShowDialog。
可以彈出一個我們指定的窗口, 僅此而已, 那么在Prism當中, Dialog指的是什么?
Prism提供了一組對話服務, 封裝了常用的對話框組件的功能, 例如:
- RegisterDialog/IDialogService (注冊對話及使用對話)
- 打開對話框傳遞參數/關閉對話框返回參數
- 回調通知對話結果
創建Dialog流程

- 創建對話框,通常是一組用戶控件 ,並且實現 IDialogAware
public interface IDialogAware
{
string Title { get; }
event Action<IDialogResult> RequestClose;
bool CanCloseDialog();
void OnDialogClosed();
void OnDialogOpened(IDialogParameters parameters);
}
- 注冊對話框 RegisterDialog
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
//僅注冊視圖
containerRegistry.RegisterDialog<MessageDialog>();
//注冊視圖時綁定VM
containerRegistry.RegisterDialog<MessageDialog, MessageDialogViewModel>();
//添加別名
containerRegistry.RegisterDialog<MessageDialog>("DialogName");
}
- 使用IDialogService接口 Show/ShowDialog 方法調用對話框

private readonly IDialogService dialogService;
private void ShowDialog()
{
DialogParameters keys = new DialogParameters();
keys.Add("message", "Hello,Prism!");
dialogService.ShowDialog("MessageDialog", keys, arg =>
{
});
}
調用Show/ShowDialog,我們通過注冊時候的名稱進行打開, 並且可以傳遞參數, 以及回調方法(主要用於返回對話框的返回結果)
封裝Dialog API

對於對話框而言, 通常我們需要做的只是打開, 傳遞參數, 接收到指定的返回結果,僅此而已。
對於常用的公共對話框, 我們可以封裝成擴展方法, 以便於我們在應用程序的任何位置可以使用到它, 所以, 通常我們可以考慮以下做法:
public static void ShowNotification(this IDialogService dialogService,
string message, Action<IDialogResult> callback)
{
var p = new DialogParameters();
p.Add("message", message);
dialogService.ShowDialog(“NotificationDialog", p, callback);
}
結語
本系列教程講解了Prism當中的以下功能:
- 如何創建Prism應用程序以及使用VS擴展包
- Region (區域)
- Module (應用程序模塊化)
- 視圖注入 (模塊如何使用依賴注入)
- MVVM (MVVM如何使用)
- Navigation (應用程序導航功能)
- Dialog (對話框服務)
本系列課程為公益課程, 由作者痕跡(QQ:779149549)發起, 由50位小伙伴每人20元眾籌創作的課程, 其中包括文字版教程及視頻版教程。 本課程所有收入全部以C#開發者名義捐贈予第
三方的慈善機構。
參與者包含的內容:
- 所有課程文字版存檔(md)
- 所有課程視頻源文件
- 所有課程PPT源文件
捐贈公示見視頻教程地址:
點擊觀看本系列教程
大感謝
由衷的感謝以下網友的大力支持, 沒有你們, 就沒有現在的這個系列課程, 也非常感謝每一位朋友的信任與認可, 能夠讓大家一起為社區、為社會做出一點微小的貢獻。
- 31849022(超級士兵): 100元
- 554227643(深圳-c#-我是廢物) : 30元
- 513994020(自橫): 50元
- 275794764(上海-c# 沙羅鐵樹)
- 324563068(成都-C#-俺是肥貓)
- 276630126(東莞-C#-肖乓之)
- 574378328(廣州-C#-ροι囧rz)
- 15828571974(成都-C#-Mr.J)
- 1269720707(C#–安徽–卑微小徐)
- 1940070028(上海-C#-菜雞進階)
- 250429809(廣州-C#-真的假不)
- 452077349(合肥-C#-陳聰)
- 2584414674(北京-C#-韭菜)
- 523656448(北京-.NET-NOOB KILLER-接單)
- 1411719639(常州-C#-視覺小白)
- 943880339(上海-C#/工控-老丁)
- 1144389736(合肥-C#-中南)
- 749128070(北京-C#-上位機)
- 564229357(大連_Shadow_C# Win)
- 341818(英倫)
- 738367869(群主)
- 1409458062(北京-wpf-述不作)
- 914000741(昆明-C#-立青)
- 1247517355(東莞-C#-OZ)
- 123211521(易極智控)
- 1033566918(廣州-C#-小白)
- 1211566092(成都-C#-do)
- 956881848(惠州-C#-吳念真)
- 365466988(深圳-c#-Lu、)
- 454879105(杭州-.NET-賦予)
- 2603473237(柳州-C#-LastDance)
- 451598452(那年夏天)
- 164131387(山有木兮木有枝)
- 469453928(沈陽-.NET-Sky)
- 597606219(揚州-C#-石頭)
- 625297716(上海-C#-小白)
- 869351670(陳建生)
- 2425101801(杭州-C#-很好)
- 332933441(湖南-C#-夏日的風)
- 996771863(四川-C#-Bug專業戶)
- 15321733(深圳-C#-TM)
- 757957839(上海-C#-寶寶)
- 920986096(湖南-C#-蝸牛)
- 648923523(泉州-C#-白陸)
- 397756029(Tony.Chen)
- 524937203(成都-WPF-兔子)
- 969641993(寧波-C#-Glimmer)
- 292391438(山東-C#-彤彤)
- 2976961441(北京-WPF-飛行)
- 1580011388(北京-C#-XYJ)
- 619459516(◇緈福小妖◇)
- 121659440(貴州-C#-風雨)
- 3137245609(廣州-C#-響聲)
