2012-02-23 11 views
0

私のアプリケーションでは、私はプリズムを使用しており、発見(Unity)によって3つのモジュールを読み込みます。リージョンの次のビューまたは最後のビューをアクティブにする方法は?

モジュールがロードされると、各ビューは「TopLeftRegion」領域に登録されます。

私はモジュールビューのナビゲーションを実行しようとしています。つまり、BeforeNextメソッドを作成して、そのリージョンの現在のビューをアクティブにすることができます(または["TopLeftRegion"].Activate(..))。

例えば、私が持っている想像:

|_ModuleA 
| 
|_ModuleB 
| 
|_ModuleC 

を私の現在のビューがModuleAであれば、私はその領域内ModuleAを示さなければならないBeforeを押すと、ModuleBを示さなければならない、Nextを押した場合。

私はプロパティを見ていた。

regionManager.Regions["TopLeftRegion"].Views 

しかし、私はこれを行うにはわかりません。プロパティViewは、データへのアクセスとそのデータへの移動を許可していません。

ここでは単純なプロジェクトですが、私はShellViewModelでそのメソッドを作成しようとしていますが、取得できません。どのように各モジュールをナビゲートすることができますか?

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

+0

RequestNavigateを試しましたか? –

答えて

1

Prismは地域で唯一のアクティブなビューがあることを想定していないので、これは超簡単にする地域クラス上の任意のプロパティはありません。しかしそれほど難しいことではありません。

RegionManagerクラスは、ActiveViewsプロパティでアクティブなビューを追跡します。どちらのビューがアクティブであるかは追跡されません。あなたの地域では、アクティブなビューが1つしかサポートされていないので、そのコレクションの最初のビューを見つけることができます。

その他の難しい部分は、Region.Viewsコレクション内のアクティブなビューを見つけることです。以下では、Region.ViewsをListとしてキャストし、FindIndexを使用してそのアクティブなビューのインデックスを見つけることができました。あなたの代わりに1を加えるのインデックスから1を引くと思い除い

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); 
    } 

は、前のビューにナビゲートすることは、ほとんど同じになります。

関連する問題