14

Composite WPF(Prism)で、モジュールをIRegionMangerコレクションに追加する場合、IRegion.AddとIRegionManager.RegisterViewWithRegionを使用する場合の違いは何ですか?

IRegion.Add

public void Initialize()
{
    _regionManager.Regions["MainRegion"].Add( new ModuleAView() );
}

IRegionManager.RegisterViewWithRegion

public void Initialize()
{
    _regionManager.RegisterViewWithRegion( "MainRegion", typeof( ModuleAView ) );
}
4

2 に答える 2

15

違いは、ビューの作成を誰が担当するかです。IRegion.Addシナリオ(ビューインジェクションとも呼ばれます)では、事前にビューをインスタンス化する必要があります。( View DiscoveryRegisterViewWithRegionとも呼ばれる)を使用した他のシナリオでは、リージョンマネージャーはビュー自体をインスタンス化します。

どちらか一方を実行したい技術的な理由がいくつかあります。例えば

  • ビューを作成するより複雑な方法がありました(おそらく、ビューとそのViewModelを作成し、DataContextプロパティを自分で設定してそれらを結合したい場合)、ビューインジェクションを使用する必要があります
  • リージョンスコープを利用する場合は、ビューインジェクションを使用する必要があります。

関連するドキュメントは次のとおりです。ビューの構成(ビューの挿入とビューの検出、およびビューファーストまたはビュープレゼンターファーストのアプローチの説明を含む):http: //msdn.microsoft.com/en-us/library/dd458944.aspx

また、「それぞれをいつ使用するか」という非常に便利なセクションもあります。ドキュメントからの抜粋は次のとおりです。

  • ビューが作成および表示されるタイミング、またはアプリケーションロジックの結果として、リージョンからビューを削除する必要があるタイミングを明示的またはプログラム的に制御します。
  • 同じビューの複数のインスタンスをリージョンに表示します。各ビューインスタンスは異なるデータにバインドされます。
  • リージョンのどのインスタンスにビューを追加するかを制御します(たとえば、特定の顧客詳細リージョンに顧客詳細ビューを追加する場合)。このシナリオでは、このトピックで後述するスコープ領域が必要であることに注意してください。

お役に立てれば。

于 2009-09-14T16:53:02.050 に答える
1

RegisterViewWithRegion は OnContentRegistered イベントを発生させますが、もちろん、DI によってはそうではありません

于 2009-09-14T15:58:43.873 に答える