どのように私は、その初期化後のモジュールの表示を有効化/無効化することができますか?
-
21-08-2019 - |
質問
これは、複合アプリケーションWPFのためのガイダンス、又はプリズムに関する。
私は自分の殻に一つの「MainRegion」を持っています。私の様々なモジュールは、このメイン領域にロードされます。私は、メニューに利用可能なモジュールのリストを移入し、ロードするためにそれらを選択することができます。私はメニューのクリックでます:
var module = moduleEnumerator.GetModule(moduleName);
moduleLoader.Initialize(new[] { module });
初期化()モジュールのメソッドが実行されるため、が初めてではすべて、[OK]を動作しますが、Module1を、モジュール2およびモジュール3が初期化された後、私は再びモジュール2をロードするためにクリックすると、何も起こりません。
私の質問:?そのinitializeメソッドが実行された後にどのように私は、オンデマンドでのモジュールをアクティブにすることができます。
あなたの助けをありがとう!
解決
あなたが実際にモジュールを活性化しません。あなたは地域のビューをアクティブにします。この記事での読み取りを取ります。
Initializeメソッドは、一度だけ任意のモジュールのためにと呼ばれています。あなたは、私が推測するLoadModuleのが原因Initilalize方法は、地域との見解を登録しているという事実によるものであり、呼び出すときにモジュール内のビューを見ているという事実が起動されます。これは、ビューをアクティブにします。あなたが複数のビューを持っていた場合は、最後に登録さがアクティブ1になります。
あなたは地域のActivateメソッドを呼び出す必要がビューをアクティブにする(仮定IUnityContainerとIRegionManager注入さ)...
// Get a view from the container.
var view = Container.Resolve<MyView>();
// Get the region.
var region = RegionManager.Regions["MyRegion"];
// Activate the view.
region.Activate(view);
地域コントロールの種類に応じて、これはそこにあるビューを置換するかまたはそれに追加します。
他のヒント
あなたは地域のRemoveメソッドを呼び出すことにより、ビューを削除することができます。
public void RemoveViewFromRegion(string viewName, string regionName, object defaultView)
{
IRegion region = regionManager.Regions[regionName];
object view = region.GetView(viewName);
region.Remove(view);
region.Activate(defaultView);
}
あなたは、あなたの地域になりますContentControlにする必要があります。そして、あなたは、この地域にすべてのモジュールを追加する必要があります。あなたがメニューをクリックすると、あなたが特定のモジュールを活性化させるために、地域のアクティベート(...)メソッドを使用する必要があります。
これはあなたがモジュールをアクティブにしたときに、それが重なっすることができる他のモジュールがVisibility.Collapsedに設定されている意味するのでしょうか?