WPF Prism框架Region失效了?

站長最近轉(zhuǎn)載了痕跡的Prism 8系列博文,不知道你對該框架是否有一定了解了隆判?不了解,可以看看本號轉(zhuǎn)載的系列:

WPF Prism框架合集(2.創(chuàng)建Prism應用程序)

WPF Prism框架合集(3.Region)

WPF Prism框架合集(Module)

WPF Prism框架合集(5.視圖注入)

以及最近本號介紹的一款使用Prism開發(fā)的開源項目:Prism for WPF 搭建一個簡單的模塊化開發(fā)框架

基于Prism的WPF大屏項目

站長15年開始使用Prism 4僧界,去年(2020年??)也使用Prism 8做開源項目侨嘀,今天分享處理Prism Region的一個問題。

問題描述

一般客戶端項目常規(guī)操作流程是:彈出登錄窗口=》賬號驗證成功=》關閉登錄窗口=》彈出主窗口=》在主窗口作業(yè)捂襟。

常規(guī)登錄流程

像上面的gif圖主窗體咬腕,左側(cè)是一棵樹,右側(cè)是TabControl葬荷,使用Prism模塊中注入視圖代碼:

publicclassModuleOfLogModule:IModule

{

publicvoidRegisterTypes(IContainerRegistry?containerRegistry)

{

containerRegistry.RegisterForNavigation(KEY_OF_CURRENT_MODULE);

}

}

主工程TabControl為模塊視圖顯示區(qū)域:

<TabControl prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabRegion}" />

點擊左側(cè)菜單樹時涨共,動態(tài)導航模塊視圖:

privatevoidRaiseSelectedItemHandler(CustomMenuItem?menuItem)

{

//?此處省略N多代碼

region.RequestNavigate(menuItem.Key);

//?此處省略N多代碼

}

實際運行時發(fā)現(xiàn)導航?jīng)]有起作用,原來的操作是登錄成功宠漩,直接New的主窗體彈出举反,app.xaml.cs中注冊的登錄窗體視圖:

protectedoverrideWindowCreateShell()

{

returnContainer.Resolve();

}

百度到也有人遇到這個問題:

WPF Prism框架下先登錄窗體再打開主窗體

討論區(qū)很火哄孤,沒看到想要的結(jié)果瘦陈。

prism – 區(qū)域管理器無法在自定義彈出窗口中找到區(qū)域

這篇給出的答案是手動再注冊區(qū)域管理器,站長沒有采用蛾默。

RegionManager.SetRegionName(?theNameOfTheContentControlInsideThePopup,?WellKnownRegionNames.DataFeedRegion?);

RegionManager.SetRegionManager(?theNameOfTheContentControlInsideThePopup,?theRegionManagerInstanceFromUnity?);

Prism MVVM應用 登陸后切換主窗體實現(xiàn)

這個代碼是將登錄與主窗體做為用戶控件捉貌,app.xaml.cs中注冊shellview,shellview中設置一個區(qū)域牧挣,兩個用戶控件通過導航在這個區(qū)域切換,效果是沒問題裆针,主窗體內(nèi)的區(qū)域能正常使用世吨,但自定義的登錄界面和主界面呻征,一般標題欄啥的都不一樣陆赋,這種做法比較麻煩,不推薦使用攒岛。

看問題3類似的描述:Prism MVVM應用 登陸后切換主窗體實現(xiàn)

應用場景

使用Prism7開發(fā)WPF程序阵子,編碼采用MVVM形式挠进。當程序啟動時誊册,首先進入一個登陸界面案怯,進行登陸認證,認證成功后轉(zhuǎn)入程序布局主窗口金砍。

設計思路

WPF程序框架搭建后麦锯,程序中存一個Shell.xaml,相當于表演者的唯一舞臺鹅巍。登陸窗體(以下簡稱?LoginView)和程序布局主窗體(以下簡稱?MainView),分別利用IRegionManager進行管理骆捧,根據(jù)需要在不同時機相繼出場表演。所有操作均由各自ViewModel(簡稱VM)代碼完成妆绞。

1.當程序啟動后接谨,Shell通過VM脓豪,使用RegionManager的Add方法激活LoginView,(注:站長補充描述=登錄驗證成功楞泼,注銷LoginView笤闯,再通過Add方法激活MainView)

站長采用的解決方案

baidu基本上沒有找到比較合適的方案了颗味,這個問題糾結(jié)了我?guī)滋欤刻焱砩细?浦马、3個小時,站長平時工作已經(jīng)不做WPF了)谨娜。

還好我有科學上網(wǎng)的方法趴梢,在YouTube上Adding a Prism Login Screen找到一個答案。

Adding a Prism Login Screen

解決方案的代碼很簡單坞靶,在app.xaml.cs中添加如下代碼滩愁,在初始化shell之前(InitializeShell,shell指CreateShell()注冊的主窗體)辫封,先彈出登錄窗口廉丽,驗證成功再初始化shell(base.InitializeShell(shell)):

protectedoverridevoidInitializeShell(Window?shell)

{

LoginView?loginView?=newLoginView();

if(loginView.ShowDialog()?==true)

{

varshellVM?=?shell.DataContextasMainWindowViewModel;

shellVM.InitData();

base.InitializeShell(shell);

}

else

{

Application.Current.Shutdown(-1);

}

}

文末探討

其實該解決方案還是有問題的,在調(diào)用InitializeShell(Window shell)之前责球,站長調(diào)試發(fā)現(xiàn)模塊視圖已經(jīng)執(zhí)行了初始化,按道理說應該是登錄成功后模塊才執(zhí)行初始化的嘉裤,更多思考留給你屑宠,有什么建議歡迎Dotnet9網(wǎng)站留言典奉。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卫玖,一起剝皮案震驚了整個濱河市假瞬,隨后出現(xiàn)的幾起案子迂尝,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件说榆,死亡現(xiàn)場離奇詭異签财,居然都是意外死亡唱蒸,警方通過查閱死者的電腦和手機神汹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滔以,“玉大人你画,你說我怎么就攤上這事桃漾。” “怎么了适滓?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵粒竖,是天一觀的道長蕊苗。 經(jīng)常有香客問我朽砰,道長瞧柔,這世上最難降的妖魔是什么造锅? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任哥蔚,我火速辦了婚禮糙箍,結(jié)果婚禮上深夯,老公的妹妹穿的比我還像新娘咕晋。我一直安慰自己,他們只是感情好办桨,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著殊霞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绷蹲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天顾孽,我揣著相機與錄音祝钢,去河邊找鬼。 笑死若厚,一個胖子當著我的面吹牛拦英,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播测秸,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疤估,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霎冯?” 一聲冷哼從身側(cè)響起铃拇,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沈撞,沒想到半個月后慷荔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年墓卦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呢堰。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡骂维,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乖杠,我是刑警寧澤环揽,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布通今,位于F島的核電站漏策,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏褂乍。R本人自食惡果不足惜只酥,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一叫胖、第九天 我趴在偏房一處隱蔽的房頂上張望怎棱。 院中可真熱鬧,春花似錦、人聲如沸梆暖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缴挖。三九已至,卻和暖如春棚点,著一層夾襖步出監(jiān)牢的瞬間默责,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茄茁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓嗦嗡,卻偏偏與公主長得像茄厘,于是被迫代替她去往敵國和親矮冬。 傳聞我的和親對象是個殘疾皇子窑滞,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容