3

これは、WPF または Prism の複合アプリケーション ガイダンスに関連しています。

私のシェルには「MainRegion」が 1 つあります。私のさまざまなモジュールは、このメイン領域にロードされます。メニューに使用可能なモジュールのリストを表示し、それらを選択してロードできます。メニューをクリックすると、次のようになります。

var module = moduleEnumerator.GetModule(moduleName);
moduleLoader.Initialize(new[] { module });

モジュールの Initialize() メソッドが実行されるため、最初はすべて正常に動作しますが、Module1、Module2、および Module3 が初期化された後、クリックして Module2 を再度ロードしても何も起こりません。

私の質問: 初期化メソッドが実行された後、モジュールをオンデマンドでアクティブ化するにはどうすればよいですか?

ご協力ありがとうございました!

4

4 に答える 4

4

モジュールを実際にアクティブ化するわけではありません。リージョンでビューをアクティブにします。この記事を読んでください。

Initialize メソッドは、モジュールに対して 1 回だけ呼び出されます。LoadModule を呼び出したときにモジュール内のビューがアクティブになっているのは、Initilalize メソッドがビューをリージョンに登録しているためだと思います。これにより、ビューがアクティブになります。複数のビューがある場合は、最後に登録されたビューがアクティブになります。

ビューをアクティブにするには、領域の 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);

領域コントロールのタイプに応じて、そこにあるビューが置き換えられるか、追加されます。

于 2009-05-22T10:22:13.213 に答える
2

ビューを削除するには、Regions の 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); 
    }
于 2010-08-10T21:46:53.537 に答える
0

自分の地域となるContentControlが必要です。次に、すべてのモジュールをこのリージョンに追加する必要があります。メニューをクリックするときは、特定のモジュールをアクティブ化するために、リージョンのActivate(...)メソッドを使用する必要があります。

于 2008-12-14T21:50:19.433 に答える
0

これは、モジュールをアクティブ化すると、それによってオーバーラップする可能性のある他のモジュールが Visibility.Collapsed に設定されるということですか?

于 2010-02-05T23:20:47.837 に答える