2013-10-04 18 views
1

我是Prism的新手,目前我正在使用Prism的「區域」概念編寫我的第一個應用程序。我目前有一個包含單個區域的Shell應用程序,我在其中顯示在單獨模塊中定義的視圖。該視圖有兩個自己的區域,Subregion1Subregion2,它們顯示模塊中定義的兩個視圖。RegionManager無法找到模塊內的區域

這一切工作正常,視圖和子視圖顯示在正確的位置。然而,當我試圖找到任何視圖的或子視圖的的ViewModels(使用regionManager.Regions["Subregion1"];)的子視圖中的一個,我笑臉相迎的錯誤:

The region manager does not contain the SiteManager.SiteList region.

我最初認爲這可能是一個問題有多個IRegionManager的實例,但我讀過的大多數文檔都指出,除非特別請求作用域IRegionManager,否則將提供全局實例IRegionManager

我也試過各種組合的靜態RegionManager.UpdateRegions()RegionManager.SetRegionManager(....),都無濟於事。

對於爲什麼RegionManager無法找到我請求的區域的任何想法,儘管我可以在沒有任何問題的情況下向這些區域註冊視圖?

編輯:我試圖訪問子視圖的視圖模型中的命令中的區域。

+0

您在顯示包含它們的視圖之前還是之後嘗試訪問子區域? –

+0

@AdiLester之後。在我的情況下,我正在分區域視圖的視圖模型中訪問它們。 –

回答

1

你得到這個異常的原因是你試圖從view/viewmodel的構造函數中訪問它們尚未創建的區域。您可以輕鬆驗證,通過嘗試從視圖的Loaded事件中訪問它們,它們已經被初始化。

Any ideas as to why the RegionManager isn't able to find the regions I'm requesting, even though I can register views to these regions without any problems?

註冊區域的視圖不需要區域實際加載。當你向一個區域註冊一個視圖時,這些信息被保存在內存中,當這個區域被創建時(可能會晚得多),Prism知道用適當的視圖初始化該區域。

+0

我實際上是在視圖模型中定義的命令中訪問區域,所以當我嘗試訪問區域時視圖和視圖模型應該已經存在。 –