0

PRISM (複合 WPF ガイダンス/ライブラリ) を使用したアプリケーションの構築を検討しています。アプリケーション モジュールは垂直に分割されます (顧客、サプライヤー、受注など)。これはまだ比較的簡単です...すべての作業が行われるメイン領域を持つシェルもありますが、次の動作が必要です:メインシェルにメニューが必要で、オプションのそれぞれがクリックされたとき(顧客、サプライヤーなど) モジュールを見つけてリージョンにロードする必要があります (一度に 1 つのビューのみ)?

この種の動作をするサンプル アプリケーションを知っている人はいますか? すべてのサンプルは、すべてのモジュールをメイン シェルにロードすることに重点を置いていますか? また、メニュー バーもモジュールにする必要がありますか?

[更新] メニューから選択されたモジュールに基づいて、リージョンにモジュールを挿入するにはどうすればよいですか? すべての例は、モジュールが初期化時にビューを領域に挿入することを示していますか? メニューでモジュールが選択されている場合にのみ、ビューを挿入する必要がありますか?

4

5 に答える 5

4

はい、PRISM がお手伝いします。

ここで言及する価値のある多くのこと。

RE: Prism は私に適していますか?

モジュールをオンデマンドでロードできます。PRISM には実行時にモジュールをロードする機能があるため、この場合、Shell と ModuleA を使用して上記のソリューションを起動するとします。次に、ユーザーがイベント (メニューの選択など) をトリガーすると、ModuleB を動的にロードして、それをプレイに挿入できます。ただし、明確にするために、ModuleB が他のモジュールなどに独自の依存関係を持たないことを確認する必要があるため、ここで実際に座って下調べを行う必要があります (通常、インフラストラクチャ モジュールを使用するのが賢明です。私はテクニックを使用しました)。ここでは、モジュールのマニフェストがあり、絶対的な依存関係をリストする XML で検索し、最初にそれらがロードされていることを確認してから、ModuleB をロードします)。

PRISM ヘルプ ドキュメント (開発活動) を介してオンデマンドでモジュールをロードするを参照してください。リモートダウンロード用のモジュールの準備も参照してください

RE: 実行時にビューを挿入する

メニューを介してリージョンにビューを挿入するのは、IRegionManager にアクセスして追加する単純なケースです。これを行うには、使用している ViewModel/Presenter/Controller のコンストラクターで次のことを確認してください。

MyConstructor(IRegionManager regionManager, IUnityContainer container) 

PRISM と同様に、必要なオブジェクトを構築物にほとんど追加できます。PRISM は、時間と予算内でそこに到着することを保証します (へへ)。

そこから、ビューを追加する際に取る通常のアプローチです...例:

IMyViewInstance myViewInstance = this.container.Resolve<IMyViewInstance>();
IRegion myRegion = this.regionManager.Regions["YourRegion"];
myRegion.add(myViewInstance);
myRegion.Active(myViewInstance);

そして、すべてが集まるはずです!:)

ノート:

  • Construct でコンテナと regionManager へのローカル参照を設定してください (this.container = container など)。
  • 上記の名前空間が存在する場所がわからない場合は、たとえば IUnityContainer を右クリックし、Visual Studio で解決します (右クリック メニュー)。
  • Add ロジックをメニュー イベントに配置するか、中央のメソッドを使用します。

Scott Barnes - マイクロソフトのリッチ プラットフォーム プロダクト マネージャー。

于 2009-05-19T06:18:57.760 に答える
3

dnrTVで Prism の Brian Noyes を見終わったところです。これは私のすべての質問に答えました...

于 2008-10-08T14:57:18.543 に答える
0

メイン リージョンを ContentControl にすることができます。この方法では、一度に 1 つのビューのみがアクティブになります。モジュールを「オンデマンド」でロードすることもできます。これを行う方法を示すクイックスタートがあります。また、モジュールが既に 1 回初期化されている場合、2 回目の初期化ではモジュールの Initialize() メソッドが実行されないことにも注意してください。メニューをクリックすると、オンデマンドでモジュールがロードされ (ビューはまだロードされません)、EventAggregator を介してイベントを起動できるので、モジュールがビューを追加できるようになると便利です (名前付きのビューを 2 回追加しないためのアプローチ) およびビューのアクティブ化 (これにより、ビューがリージョンに確実に表示されます)。

これが役に立てば幸いです、ジュリアン

于 2008-10-04T02:49:49.873 に答える
0

「モジュールを見つけてリージョンにロードする」という意味が明確ではありません。モジュールのビューを読み込んでシェルに追加できます。複合 UI アプリ ブロックと CompositeWPF は、IoC パターンの上に構築されます。これは、モジュールがシェルのメニュー ストリップにメニュー項目を挿入するか、シェルによって生成されたイベントをサブスクライブする必要があることを意味します。

于 2008-09-08T08:21:07.967 に答える
-3

時間を節約するには、John Papa のプレゼンテーション フレームワークの記事を確認してください。Screen Conductor領域からの表示または非表示で画面を処理する3rd object( ) があれば、より簡単になります。

于 2010-07-23T19:50:29.807 に答える