Prism 4 のナビゲーション機能を学習するデモ アプリを作成しています。アプリには 2 つのモジュールがあり、それぞれに 3 つのビューがあります。
- テキスト ブロックを含む UserControl (「モジュール A へようこそ」)
- RibbonTab (Region Adapter を使用)、および
- Outlook スタイルのタスク ボタン (Outlook のメール、カレンダーなど)
シェルには、"RibbonRegion"、"TaskButtonRegion"、および "WorkspaceRegion" の 3 つの名前付き領域があります。ビューはこれらのリージョンにロードされます。基本的なセットアップをテストするために、3 つのビューすべてを Prism Region Manager に登録して、起動時に読み込まれるようにし、すべてが期待どおりに機能するようにしました。
次に、起動時にタスク ボタンのみが読み込まれるように設定を変更しました。他のビューは、タスク ボタンをクリックすることによって、要求があった場合にのみロードされます。私のモジュール初期化子は次のようになります。
public void Initialize()
{
/* We register the Task Button with the Prism Task Button Region because we want it
* to be displayed immediately when the module is loaded, and for the lifetime of
* the application. */
// Register Task Button with Prism Region
m_RegionManager.RegisterViewWithRegion("TaskButtonRegion", typeof(ModuleATaskButton));
/* We register these objects with the Unity container because we don't want them
* instantiated until we navigate to this module. */
// Register View and Ribbon Tab as singletons with Unity container
m_Container.RegisterType(typeof(ModuleAView), "ModuleAView", new ContainerControlledLifetimeManager());
m_Container.RegisterType(typeof(ModuleARibbonTab), "ModuleARibbonTab", new ContainerControlledLifetimeManager());
}
IRegionManager.RequestNavigate()
ユーザーがタスク ボタンをクリックすると、ビューを表示するために呼び出す ICommand オブジェクトが呼び出されます。
public void Execute(object parameter)
{
// Initialize
var regionManager = m_ViewModel.RegionManager;
// Show Ribbon Tab
var moduleARibbonTab = new Uri("ModuleARibbonTab", UriKind.Relative);
regionManager.RequestNavigate("RibbonRegion", moduleARibbonTab);
// Show View
var moduleAView = new Uri("ModuleAView", UriKind.Relative);
regionManager.RequestNavigate("WorkspaceRegion", moduleAView);
}
タスクボタンがクリックされるとコマンドが呼び出されますが、得られるのは次のとおりです。
UserControl は明らかに としてロードされておりSystem.Object
、RibbonTab も同じものをロードしていると思われます。問題は私のRequestNavigate()
通話、または Unity への登録にあると思います。しかし、私は問題を特定できません。
何が起こっているのか、誰かが光を当てることができますか? ご協力いただきありがとうございます。