2009-06-04 13 views
3

"ActiveModule"という名前の領域があり、別のビューで再利用したいと思っています。たとえば、検索ボタンを押してそこに検索ビューを表示します。プリズムは同じ領域のビュー間で切り替える

ATMで行うことができる唯一の方法は、その地域のすべてのアクティブなビューを非アクティブにしてから、好きなビューをアクティブにすることです。これはちょっと汚いですか、「ビューマネージャ」などありますか?

答えて

4

リージョンがContentControlである場合、またはContentControlから派生している場合は、一度にアクティブなビューが1つしか存在できず、そのリージョンの検索ビューをアクティブ化する必要があります。

0

IRegionManagerを使用している場合は、自分が認識しているタイプのビューをすべて削除してから追加することができます。

foreach (var view in _regionsManager.Regions["MyRegion"].Views.ToArray()) 
    { 
     if (view is MyType || 
      view is MyOtherType) 
      _regionsManager.Regions["MyRegion"].Remove(view); 
    } 

    _regionsManager.AddToRegion("MyRegion", typeof(MyView)); 

これは決して理想的ではありませんが、機能します。 :)

0

私が知っている限り、あなたがやっていることは理論的にはSCSFで最も上のビューがフレームワークによって活性化された唯一の方法です。これを実現するには、独自のViewManagerまたは同等のShowViewServiceを作成することができます。事実、私が何をしたのか?

1

複数のビューを表示できるcontentControlのタイプを使用することを検討しましたか? たとえば、あなたはこのようにTabControlのを使用することができます。

<TabControl Name="MainRegion" Regions:RegionManager.RegionName="MainRegion"/> 

あなたは今、地域に複数のビューを追加することができます。 PrismのINavigationAwareIActiveAwareのインタフェースを使用して、ビュー上でナビゲーションを実行する(アクティブにする、正しいビューを見つけるなど)。

0

あなたの枠組みを打ち出していますが、ナビゲーション関連のフレームワークを使用している場合、あなたは、単に地域の他のビューを非アクティブ化の世話をする

regionManager.RequestNavigate(RegionNames.MainContentRegion, new Uri("your target view" + parameters, UriKind.Relative)); 

上記の行を呼び出すことができますかわかりません。ビューの発見やビューの注入を行う場合

そうでなければ、アプローチを使用することができますhere

関連する問題