欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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)航頁(yè), 字符串類型, 對(duì)應(yīng)的是我們注冊(cè)頁(yè)面的nameof

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

正如,我們想要在導(dǎo)航頁(yè)前, 傳遞一些參數(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)前頁(yè)時(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() : 返回上一頁(yè)
  • CanGoBack : 是否可以返回上一頁(yè)
  • GoForward(): 返回后一頁(yè)
  • CanGoForward : 是否可以返回后一頁(yè)

1.示例(返回上一頁(yè))

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

2.示例(返回下一頁(yè))

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

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

相關(guān)文章

  • 學(xué)會(huì)區(qū)分Visual Studio 2005,Visual Studio 2005 Team System和MSDN Premium 訂閱的各個(gè)版本

    學(xué)會(huì)區(qū)分Visual Studio 2005,Visual Studio 2005 Team System和MSDN P

    學(xué)會(huì)區(qū)分Visual Studio 2005,Visual Studio 2005 Team System和MSDN Premium 訂閱的各個(gè)版本...
    2007-01-01
  • asp.net for循環(huán)語句

    asp.net for循環(huán)語句

    最近在網(wǎng)上看了很多關(guān)于for循環(huán)的用法,發(fā)現(xiàn)自己對(duì)for循環(huán)還是很缺乏理解的。
    2008-08-08
  • .NET?6更新使.NET生態(tài)系統(tǒng)蛻變

    .NET?6更新使.NET生態(tài)系統(tǒng)蛻變

    微軟正式發(fā)布.NET最新長(zhǎng)期支持版本.NET?6,這個(gè)版本的更新重點(diǎn),除了C#和F#都有許多語言功能改進(jìn)之外,.NET?6終于集大成,成為跨瀏覽器、云計(jì)算、桌面、物聯(lián)網(wǎng)和移動(dòng)應(yīng)用程序的統(tǒng)一平臺(tái),性能也獲得大幅提升,并且更完整支持Arm64
    2022-01-01
  • ASP.Net?Core?MVC基礎(chǔ)系列之項(xiàng)目創(chuàng)建

    ASP.Net?Core?MVC基礎(chǔ)系列之項(xiàng)目創(chuàng)建

    這篇文章介紹了創(chuàng)建ASP.Net?Core?MVC項(xiàng)目的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • ASP.NET中 PlaceHolder 控件的使用方法

    ASP.NET中 PlaceHolder 控件的使用方法

    有時(shí)候項(xiàng)目中需要在頁(yè)面上動(dòng)態(tài)生成一些控件,所以PlaceHolder容器是個(gè)不錯(cuò)的選擇。微軟在asp.net 2.0 中給出的PlaceHolder解決方案,更加符合后臺(tái)和表現(xiàn)分離的原則。
    2016-04-04
  • ASP.NET2.0+SQL Server2005構(gòu)建多層應(yīng)用

    ASP.NET2.0+SQL Server2005構(gòu)建多層應(yīng)用

    ASP.NET2.0+SQL Server2005構(gòu)建多層應(yīng)用...
    2006-12-12
  • 常用C#關(guān)鍵字詳解教程(比較全面)

    常用C#關(guān)鍵字詳解教程(比較全面)

    學(xué)習(xí)C#很久了,但可能你也和我一樣,總有那么一兩個(gè)關(guān)鍵詞,說不清楚它是什么意思,有什么用,那么這篇文章就帶你一一講解。
    2016-04-04
  • ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解

    ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解

    ABP框架是基于ASP.NET的Web開發(fā)框架,不過它遵循一種名為DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的設(shè)計(jì)模式原則,接下來我們就來看一下ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解
    2016-06-06
  • WPF中Style樣式及其觸發(fā)器

    WPF中Style樣式及其觸發(fā)器

    這篇文章介紹了WPF中Style樣式及其觸發(fā)器,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • ASP.NET?HttpRequest類用法

    ASP.NET?HttpRequest類用法

    這篇文章介紹了ASP.NET?HttpRequest類用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01

最新評(píng)論