最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF框架Prism中導(dǎo)航Navigation用法介紹

 更新時(shí)間:2022年02月11日 10:48:46   作者:痕跡g  
這篇文章介紹了WPF框架Prism中導(dǎo)航Navigation的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

使用場(chǎng)景

在普遍的業(yè)務(wù)場(chǎng)景當(dāng)中, 必不可少的是頁面切換, 而Prism就可以使用Navigation功能來進(jìn)行頁面導(dǎo)航, 在不同的場(chǎng)景當(dāng)中會(huì)有各種用法, 例如在切換頁面驗(yàn)證、傳遞參數(shù)、返回上一頁、返回下一頁等功能。

導(dǎo)航的基本條件

1.注冊(cè)顯示區(qū)域

2.注冊(cè)導(dǎo)航頁面

1.注冊(cè)導(dǎo)航

注冊(cè)視圖類型或添加別名, 如果為指定別名,名稱默認(rèn)為當(dāng)中類型的名稱

public class ModuleAModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {

        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //添加別名 "CustomName"
            containerRegistry.RegisterForNavigation<ViewA>("CustomName");
            //默認(rèn)名稱 "ViewB"
            containerRegistry.RegisterForNavigation<ViewB>();
        }
    }

注冊(cè)時(shí),指定ViewModel或添加別名。

 public class ModuleAModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {

        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //指定ViewModel
            containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>();
            //指定ViewModel并且添加別名
            containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("CustomName");
        }
    }

2.使用導(dǎo)航

正如前面的章節(jié)所講到, Region的注冊(cè)以及管理、導(dǎo)航等, 我們可以使用IRegionManager接口,所以,我們現(xiàn)在便可以使用該接口實(shí)現(xiàn)導(dǎo)航功能, 如下所示:

IRegionManager regionManager = …;
regionManager.RequestNavigate("RegionName", "ViewName");

可以注意點(diǎn), 我們調(diào)用了IRegionManager接口的RequestNavigate方法, 并且傳遞了兩個(gè)參數(shù):

  • RegionName: 該參數(shù)為注冊(cè)的區(qū)域名稱
  • ViewName: 該參數(shù)實(shí)際為我們上面注冊(cè)過的導(dǎo)航頁, 字符串類型, 對(duì)應(yīng)的是我們注冊(cè)頁面的nameof

3.帶參數(shù)導(dǎo)航

正如,我們想要在導(dǎo)航頁前, 傳遞一些參數(shù), 則可以使用NavigationParameters, 如下所示:

var param = new NavigationParameters();
param.Add("Parameter", param);
_regionManger.RequestNavigate("RegionName", "ViewName", param);

//類似URL地址傳遞參數(shù)
_regionManger.RequestNavigate("RegionName", "ViewName?id=1&Name=xiaoming");

疑問?

當(dāng)我們使用導(dǎo)航為指定區(qū)域注冊(cè)視圖時(shí), 我們?cè)趺纯刂拼蜷_的過程? 所以, 下面我們將講解一下

INavigationAware接口。

INavigationAware

該接口包含3個(gè)方法, 每個(gè)方法中都包含當(dāng)前導(dǎo)航的上下文, 如下所示:

        public void OnNavigatedTo(NavigationContext navigationContext)
        {

        }

        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            return true;
        }

        public void OnNavigatedFrom(NavigationContext navigationContext)
        {

        }
  • OnNavigatedTo: 導(dǎo)航完成前, 此處可以傳遞過來的參數(shù)以及是否允許導(dǎo)航等動(dòng)作的控制。
  • IsNavigationTarget: 調(diào)用以確定此實(shí)例是否可以處理導(dǎo)航請(qǐng)求。否則新建實(shí)例
  • OnNavigatedFrom: 當(dāng)導(dǎo)航離開當(dāng)前頁時(shí), 類似打開A, 再打開B時(shí), 該方法被觸發(fā)。

INavigationAware 執(zhí)行流程

獲取導(dǎo)航請(qǐng)求參數(shù)

正如上面所描述, 導(dǎo)航中允許我們傳遞參數(shù), 用于在我們完成導(dǎo)航之前, 進(jìn)行做對(duì)應(yīng)的邏輯業(yè)務(wù)處理。這時(shí)候, 我們便可以在OnNavigatedTo方法中通過導(dǎo)航上下文中獲取到傳遞的所有參數(shù)。如下:

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            var id = navigationContext.Parameters.GetValue<int>("id");

            var name = navigationContext.Parameters["Name"].ToString();
        }

IConfirmNavigationRequest

該接口繼承于INavigationAware, 所以, 它多了一個(gè)功能: 允許用戶針對(duì)導(dǎo)航請(qǐng)求進(jìn)行攔截。

    //多了一個(gè)回調(diào)函數(shù), 該值覺得是否攔截該導(dǎo)航請(qǐng)求
    void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback);

IConfirmNavigationRequest 執(zhí)行流程

攔截導(dǎo)航請(qǐng)求

當(dāng)打開新的導(dǎo)航時(shí), 或許有些情況下你需要經(jīng)過用戶進(jìn)行確認(rèn), 這個(gè)時(shí)候, IConfirmNavigationRequest接口可以滿足需求, 如下:

        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
        {
            bool result = true;

            if (MessageBox.Show("確認(rèn)導(dǎo)航?", "溫馨提示", MessageBoxButton.YesNo) == MessageBoxResult.No)
                result = false;

            //通過回調(diào)當(dāng)前返回的確認(rèn)結(jié)果,決定是否啟動(dòng)該導(dǎo)航
            continuationCallback(result);
        }

Navigation Journal

導(dǎo)航日志, 其實(shí)就是對(duì)導(dǎo)航系統(tǒng)的一個(gè)管理功能, 理論上來說, 我們應(yīng)該知道我們上一步導(dǎo)航的位置、以及下一步導(dǎo)航的位置, 包括我們導(dǎo)航的歷史記錄。以便于我們使用導(dǎo)航對(duì)應(yīng)用程序可以靈活的控制。

IRegionNavigationJournal

該接口包含以下功能:

  • GoBack() : 返回上一頁
  • CanGoBack : 是否可以返回上一頁
  • GoForward(): 返回后一頁
  • CanGoForward : 是否可以返回后一頁

1.示例(返回上一頁)

當(dāng)導(dǎo)航日志當(dāng)中,包含上一頁的歷史記錄, 如下所示, D的前面有ABC的記錄,所以對(duì)于D而言, 它可以返回上一頁, 所以CanGoBack 為True。

2.示例(返回下一頁)

當(dāng)導(dǎo)航日志當(dāng)中,包含下一個(gè)的歷史記錄,如下所示,D的后面有E的記錄,所以對(duì)于D而言,它可以返回下一頁,所以CanGoForward 為True。

到此這篇關(guān)于WPF框架Prism中導(dǎo)航Navigation用法介紹的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Asp.Net 不同的OnClick事件區(qū)別小結(jié)(onserverclick,onclientclick)

    Asp.Net 不同的OnClick事件區(qū)別小結(jié)(onserverclick,onclientclick)

    下面以 HTML的按鈕( system.web.ui.htmlcontrols ) 和 ASP.NET服務(wù)端按鈕 ( system.web.ui.webcontrols ) 為例
    2012-05-05
  • C#命名空間System.ComponentModel屬性方法匯總

    C#命名空間System.ComponentModel屬性方法匯總

    本文詳細(xì)講解了C#命名空間System.ComponentModel屬性方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • .NET Framework 4.5新特性介紹

    .NET Framework 4.5新特性介紹

    .NET Framework 4.5新特性介紹,想要使用新版本的朋友可以參考下
    2012-04-04
  • ASP.NET Core使用IHttpClientFactory發(fā)出HTTP請(qǐng)求

    ASP.NET Core使用IHttpClientFactory發(fā)出HTTP請(qǐng)求

    這篇文章介紹了ASP.NET Core使用IHttpClientFactory發(fā)出HTTP請(qǐng)求的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • asp.net平臺(tái)下C#實(shí)現(xiàn)Socket通信

    asp.net平臺(tái)下C#實(shí)現(xiàn)Socket通信

    這篇文章介紹了asp.net平臺(tái)下C#實(shí)現(xiàn)Socket通信的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • .Net?Core中使用MongoDB搭建集群與項(xiàng)目實(shí)戰(zhàn)

    .Net?Core中使用MongoDB搭建集群與項(xiàng)目實(shí)戰(zhàn)

    本文詳細(xì)講解了.Net?Core中使用MongoDB搭建集群與項(xiàng)目實(shí)戰(zhàn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .Net創(chuàng)建型設(shè)計(jì)模式之工廠方法模式(Factory?Method)

    .Net創(chuàng)建型設(shè)計(jì)模式之工廠方法模式(Factory?Method)

    這篇文章介紹了.Net設(shè)計(jì)模式之工廠方法模式(Factory?Method),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • WPF控件模板與其觸發(fā)器

    WPF控件模板與其觸發(fā)器

    這篇文章介紹了WPF控件模板與其觸發(fā)器,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • .NET Core 中的并發(fā)編程

    .NET Core 中的并發(fā)編程

    在.NET Core中,任務(wù) (tasks) 是并發(fā)編程的主要抽象表述,但還有其他支撐類可以使我們的工作更容易。下面小編和大家一起學(xué)習(xí)一下吧
    2019-05-05
  • .Net行為型設(shè)計(jì)模式之備忘錄模式(Memento)

    .Net行為型設(shè)計(jì)模式之備忘錄模式(Memento)

    這篇文章介紹了.Net行為型設(shè)計(jì)模式之備忘錄模式(Memento),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

丰县| 五莲县| 西畴县| 兴业县| 碌曲县| 辽阳县| 舞阳县| 遂川县| 封丘县| 原阳县| 泰宁县| 塘沽区| 彩票| 加查县| 慈利县| 浦江县| 长子县| 宁蒗| 富顺县| 茌平县| 太谷县| 康乐县| 兴文县| 监利县| 桃园市| 普定县| 舒兰市| 巩义市| 神池县| 岱山县| 兴山县| 宾川县| 呼和浩特市| 贵定县| 绥芬河市| 滕州市| 综艺| 双鸭山市| 南川市| 双柏县| 赤水市|