0

既存のWPFアプリケーションがあります。このアプリケーションでは、メインのTabControlがあり、このTabControlの下に複数のタブがあります。

Prismアーキテクチャを1つのタブにのみ適用したい。シェルを1つのタブとして作成したいと思います。

応募できますか?はいの場合、その特定のタブにBootStrapperをフックするにはどうすればよいですか。この場合、このタブをオンデマンドでロードします。ユーザーがこのタブをクリックしたとき。BootStrapperを介してすべてのUI要素をロードしてから、シェルを実行したい

UserControl_Loadedイベントを使用してブートストラッパーをトリガーできますか?はいの場合、どうすればブートストラッパーをインスタンス化できますか?

質問がわかりやすいといいのですが。

4

2 に答える 2

1

それは機能しますが、手作業でいくつかのことを行う必要があります(特にモジュールを機能させたい場合)。次の手順に従って、作業を進めてください。

まず、Bootstrapper、Shellなどを使用して通常のPrismプロジェクトを作成します。次に、表示するときに、そのようにリージョンを含むUserControlを取得します。

ServiceLocator.Current.GetInstance<TestUc>();

UserControlのコンストラクターで、ServiceLocatorがRegionManagerをパラメーターとして提供し、InitializeComponent()の後に次のことを実行します。

RegionManager.SetRegionManager(this, regionManager);
RegionManager.UpdateRegions();

これにより、アタッチされた依存関係プロパティがXamlでRegionManager.RegionName="..."として使用されるように設定されます。そして今、RegionManagerを介してリージョンを設定するか、Prismインフラストラクチャ全体をプルアップしてconfigからいくつかのモジュールをロードすることができます。あなたが一生懸命に行きたいとしましょう。UserControlのコンストラクターの下部にあるこのコードを過ぎると、モジュールはApp.configからロードされます。

var catalog = new ConfigurationModuleCatalog
{
    Store = new ConfigurationStore()
};

var logger = new TextLogger();
var moduleInitializer = new ModuleInitializer(ServiceLocator.Current, logger);
var moduleManager = new ModuleManager(moduleInitializer, catalog, logger);

moduleManager.Run();

ftpサーバーに小さなテストプロジェクトをアップロードしました:http://compositedevtec.tk/upload/prismTest.zip

于 2012-07-31T19:42:54.907 に答える
0

ブートストラップを使用してシェルを起動するため、これが期待どおりに機能するかどうかはわかりません。これは、アプリケーションをシェルにして、シェルをメイン アプリケーションに設定してブートストラッパーを起動するプロセスを実行することで実現できます。メイン アプリケーションは WPF アプリになりますが、アプリ内のどこかで、操作する 1 つのリージョンを定義します。

ただし、リージョンをタブ項目に追加してからアプリケーションを起動するだけではうまくいかないと思います。すべての IoC マジックが発生するためには、ブートストラップが開始ターゲットである必要があります。

簡単な答え: はい、シェルの書き方に注意が必要です。

于 2012-07-26T19:25:05.697 に答える