6

この質問は、Codeplex の Prism のサイトにも投稿されました。

オンデマンドでモジュールをロードすることに少し迷っています。皆さんが私を啓発してくれることを願っています。v2 #7を使用しています。

これが私が達成したいことです:

1) 2 つの領域があります。1 つはモジュールをインスタンス化するボタン用 (MenuRegion) で、もう 1 つはモジュールを表示するため (MainRegion) です。MenuRegion で一度に表示できるモジュールは 1 つだけです。
2) モジュールはディレクトリにあり
ます。 3) MenuModule モジュールは MenuRegion に関連付けられており、モジュール名を示すボタンを作成します。いずれかのボタンをクリックすると、対応するモジュールがロードされ、MainRegion に表示されます。
4) 動作:
    a) ModuleA ボタンをクリックし、ModuleA を表示します。ユーザーは ModuleA にデータを入力し、データは保存されていない状態のままです。
    b) ModuleB ボタンをクリックすると、ModuleB が表示されます。ユーザーは ModuleB にデータを入力し、データは保存されていない状態のままです。
    c) ModuleA ボタンをクリックすると、ModuleA が以前に入力された情報とともに表示されます。

私の仮定が間違っている場合は訂正してください。また、他の提案を教えてください。

1) MainRegion は ContentControl である必要があるため、一度に表示できるモジュールは 1 つだけです。
2) ディレクトリで利用可能なモジュールの ModuleInfo を取得するには、カタログの「GrouplessModules」を列挙する必要があると思います
3) モジュールをロードするには、myModuleManager.LoadModule(moduleName) を呼び出す必要があると思います

最後に、私の質問:

1) MenuModuleView のコンストラクターのパラメーターとして moduleManager を使用する必要がありますか?
2) 利用可能なモジュールを列挙するために、MenuModuleView 内からカタログにアクセスできるようにするにはどうすればよいですか?
3) MenuModuleView から、モジュールを列挙しながらボタンを作成し、ModuleInfo をボタンの Tag プロパティに割り当てます。このように、モジュールをロードするためのクリック イベントは 1 つだけです。これは正しいです?それは私には少し回避策のにおいがします...

助けてくれてありがとう!!!

4

1 に答える 1

7

1) MenuModuleView のコンストラクターのパラメーターとして moduleManager を使用する必要がありますか?

技術的には可能です。ただし、実際には、これを行う場合でも、ビューのデフォルト コンストラクターを定義する必要があります。そうしないと、ビューはデザイナーで機能しません。したがって、プロパティを使用して依存関係を UI コンポーネントに渡すことをお勧めします。

2) 利用可能なモジュールを列挙するために、MenuModuleView 内からカタログにアクセスできるようにするにはどうすればよいですか?

Prism のIModuleEnumeratorインターフェイスに依存し、依存性注入によってモジュール列挙子がビューに提供されます。Unity コンテナーで Prism を使用していると仮定すると、次のようになります。

[Dependency]
public IModuleEnumerator ModuleEnumerator 
{
    get; set;
}

3) MenuModuleView から、モジュールを列挙しながらボタンを作成し、ModuleInfo をボタンの Tag プロパティに割り当てます。このように、モジュールをロードするためのクリック イベントは 1 つだけです。これは正しいです?それは私には少し回避策のにおいがします..

各ボタンで同じ WPF コマンドを発生させ、代わりに のプロパティに割り当てることをお勧めModuleInfoButtonますCommandParameter。繰り返しますが、Prism には、複合シナリオでこれをきれいに行うのに役立つインフラストラクチャがあります。DelegateCommandクラスを参照してください。

最後に、モジュールを遅延ロードすることはできるかもしれませんが、アンロードすることはできないことに注意してください。AppDomainそのためには、まったく別のやかんである隔離が必要になります。

于 2008-12-19T09:24:30.140 に答える