2012-01-10 22 views
1

MEFをコンテナとしてPRISM 4.0を使用しています。私は2つの領域、ToolBarとMainRegionを私のシェルに定義しました。ツールバー領域には、カスタムRegionBehaviour - AutoPopulateExportedViewsBehaviourを使用して、自動的にToolBarModuleが設定されます。私のMainRegionには、サードパーティのドックレイアウトマネージャーを介してドッキングされる1つ以上のViewモジュールが含まれています。MEFとMVVMを使用してツールバーにPRISMモジュールを追加する方法

アプリケーションで使用可能なビューを表すツールバーボタンを作成する際に問題があります。私の考えは、ToolBarServiceまたはEventパターンを使用して、各ViewモジュールをToolBarにデカップリングして登録できるようにすることでした。彼らがツールバーに登録することができますので、私は私のモジュールの初期化を制御することができますどのように

...私はRegionManager.RegisterViewWithRegionを呼び出すまで、私のビューモジュールのコンストラクタが呼び出されていないようですが

。したがって、ボタンを追加することができますが、実際にビュー自体を表示することはできません。ビューは、登録されたビューがクリックされたときにのみ表示されます。彼らは ツールバーに登録することができますが、initally示されていないので、私は私のモジュールの初期化を制御することができますどのように

おかげ

+0

チップをありがとう。私はそれをしなければならないことを認識していませんでした。 – user630190

答えて

0

あなたはそれがどういう意味なのか分かりません。

ロードしたときにモジュールが独自のナビゲーション部分を登録するようにしたいと思っています。私は上のメニューバーと下のボタンバーを持っている同様のシナリオを持っています。ロードされた各モジュールは、 - それは初期化コードを使用して独自のボタン/メニューだ挿入します

public void Initialize() 
     { 
      this.RegionManager.RegisterViewWithRegion(RegionNames.Menu, typeof(NavigationView)); 
      this.RegionManager.RegisterViewWithRegion(RegionNames.Toolbar, typeof(ToolbarNavigationView)); 
     } 

それらの領域は、実際のボタン/他のコールの何かを押しアイテムを持っています。 examleのために、ここでそれは私が私の見解モジュールの「力」コンストラクタは、カスタムRegionBehaviourを使用して呼ばれるようにできるようになりますNavigationViewModel

namespace IDATT.Module.SystemManager.ViewModels 
{ 
    using System; 
    using System.ComponentModel.Composition; 

    using Microsoft.Practices.Prism.Regions; 

    [Export] 
    public class NavigationViewModel 
    { 
     [Import] 
     public ISecurityService SecurityService { get; set; } 

     [Import] 
     public IRegionManager RegionManager { get; set; } 

     public void Mail() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MailView).Name, UriKind.Relative)); 
     } 

     public void MaintainUser() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainUserView).Name, UriKind.Relative)); 
     } 

     public void MaintainGroup() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainGroupView).Name, UriKind.Relative)); 
     } 

     public void MaintainMailTemplate() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainMailTemplateView).Name, UriKind.Relative)); 
     } 

     public void SetUpOptions() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(SetUpSystemManagerOptionsView).Name, UriKind.Relative)); 
     } 

     public void Logout() 
     { 
      this.SecurityService.Logout(); 
     } 
    } 
} 
+0

こんにちはKatit、あなたの助けに感謝します。私は私の質問をもう少し明確にするよう言い直します。基本的に私が作成しているのは空のアプリケーションです。私はどのボタンとビューを利用できるか分かりません。これは私のフレームワークのユーザーが決定するためのものです。私がする必要があるのは、ツールバーにボタンを追加する方法です。このボタンをクリックすると、ビューが読み込まれます。 RegionManager.RegisterViewWithRegionを呼び出すまで、私のビューモジュールのコンストラクタは呼び出されないようです...私は私のビューモジュールのライフサイクルをより良くコントロールしたいと思います。それがより明確になることを願っています。ありがとう – user630190

+0

ボタンが "魔法のように"表示される理由はまだ少しはっきりしていますか?あなたが 'RegisterViewWithRegion'へのコードを書いてそれらの適切なボタンを表示するときに、ユーザーが利用可能なものを選択できるようにした場合。 – katit

+0

こんにちはKatit、私が書いているのは、ツールバー領域とメイン領域を含む汎用フレームワークです。コンテンツユーザは、このフレームワークを利用して独自のビューモジュールを作成します。メイン領域は複数のビューモジュールを同時にホストすることができ、これらはさまざまな構成でドッキングすることができます。私が公開する必要があったのは、コンテンツユーザーがビューモジュールを起動できるツールバーにボタンを作成する方法でした。おそらく私はこれについて間違った方法をとっていますが、カスタムリージョンの動作で今はうまくいくようです。それがなければ私のコンストラクタは呼び出されませんでした。 – user630190

0

です。この内部では、ビューモジュールを特定のベースビューまたはインターフェイスタイプにキャストして、関数を呼び出します。これで、私のビューがツールバーに登録されますが、アプリケーションの「メイン」領域に必ずしもビューが表示されるわけではありません。

ありがとうございました。

関連する問題