私の答えが見つかりました。この方法は次のとおりです。起動時にすべてのモジュールを読み込み、必要に応じてビューを有効または無効にします。私はこの問題をCodeProjectの記事として書いていますが、これを行う方法の概要を以下に示します。
(1)モジュールInitialize()メソッドでモジュールを追加しますが、
public void Initialize()
{
// Get main region
var mainRegion = m_RegionManager.Regions["MainRegion"];
// Load Module B
var newView = new ModuleBView();
mainRegion.Add(newView, "ModuleA.ModuleAView");
}
Add()メソッドには2つのパラメータがあります。 2番目のパラメータはビューの名前で、ビューのToString()メソッドによって生成された値に設定されます。なぜ次のステップに進むのかが分かります。
(2)ビューをアクティブにするとき、前のビューを非アクティブにする必要があります。しかし、我々は、ビューの名前を知らないかもしれないので、我々は、すべてのアクティブなビューを無効化:
public static void ClearRegion(IRegion region)
{
// Get existing view names
var oldViewNames = new List<string>();
foreach (var v in region.Views)
{
var s = v.ToString();
oldViewNames.Add(s);
}
// Remove existing views
foreach (var oldViewName in oldViewNames)
{
var oldView = region.GetView(oldViewName);
region.Deactivate(oldView);
}
}
私たちは、それぞれの名前を設定しているのでそのToStringメソッド()値に等しい表示、我々は何も知らなくても簡単に名前を得ることができます彼らについては事前に
(3)次に、新しいビューをアクティブにします。
public void Execute(object parameter)
{
// Get main region
var mainRegion = m_ViewModel.RegionManager.Regions["MainRegion"];
// Clear region
ModuleServices.ClearRegion(mainRegion);
// Activate Module A view
var moduleAView = mainRegion.GetView("ModuleA.ModuleAView");
mainRegion.Activate(moduleAView);
}
うまくいけば、あなたが軌道に乗るには十分だろう:私はMVVM ICommand.Execute()メソッドでそれを行います。私が言ったように、私はCodeProjectのデモコードを使ってより完全な書き出しを行う予定です。
David Veeneman
Foresight Systems