2012-02-23 46 views
0

在我的應用程序中,我使用Prism,它通過發現(Unity)加載三個模塊。如何激活區域的下一個或最後一個視圖?

當模塊加載時,它們在「TopLeftRegion」區域中註冊每個視圖。

我正在嘗試執行模塊視圖的導航。我的意思是,創建BeforeNext方法,可以激活(或["TopLeftRegion"].Activate(..))該區域中的當前視圖。

例如,假設我有:

|_ModuleA 
| 
|_ModuleB 
| 
|_ModuleC 

如果我目前的觀點是ModuleA,如果我按Next,必須顯示ModuleB,如果我按Before必須表明該地區ModuleA

我在看屬性:

regionManager.Regions["TopLeftRegion"].Views 

但我不知道這樣做。酒店View不允許訪問數據並進入該數據。

這是一個簡單的項目,我試圖在ShellViewModel中創建該方法,但我不明白。我怎樣才能瀏覽每個模塊?

http://www.mediafire.com/?urnrwkrb29osrle

+0

你有沒有試過RequestNavigate? – 2012-02-23 15:52:57

回答

1

棱鏡並不假定只有一個在一個地區活動視圖,所以沒有使這個超級簡單的區域類的任何屬性。但它不是太棘手。

RegionManager類跟蹤哪些視圖在ActiveViews屬性中處於活動狀態。它沒有跟蹤哪一個視圖處於活動狀態。在你的情況下,你的區域只支持一個活動視圖,所以你可以找到該集合中的第一個視圖。

另一個棘手的部分是在Region.Views集合中查找活動視圖。在下面我將Region.Views作爲List來使用,以便我可以使用FindIndex來定位該活動視圖的索引。

private void Next(object commandArg) 
    { 
     IRegion myRegion = _regionManager.Regions["TopLeftRegion"]; 
     object activeView = myRegion.ActiveViews.FirstOrDefault(); //Here we're trusting that nobody changed the region to support more than one active view 
     List<object> myList = myRegion.Views.ToList<object>();  //Cast the list of views into a List<object> so we can access views by index 

     int currentIndex = myList.FindIndex(theView => theView == activeView); 
     int nextIndex = (currentIndex + 1) % (myList.Count);  //Wrap back to the first view if we're at the last view 
     object nextView = myList[nextIndex]; 
     myRegion.Activate(nextView); 
    } 

導航到前面的視圖基本上是一樣的,除非你從索引中減去一個而不是添加一個。

相關問題