2016-06-23 3 views
0

私の問題は、CoreAPPを持っていることです。このコアアプリケーションでは、アクティブな別のモジュール(M1、M2、M3)への可能性があります。モジュールの機能がコアに影響しないように、MVVMの特定のモジュールの実装を切り離すことは可能ですか?

CoreAppにはcoreAppviewというビューがあります。そのビューでM1が起動されている場合、私は追加ボタンを表示する必要があります。

今は、単にconfigをチェックし、M1がアクティブになっている場合はボタンを追加するだけの単純なif文があります。

Core機能とAditionalモジュール機能の間にif文が1つしか書かれていないので、他の開発者がこのチェックを削除しないようにしたいと思っています。

この機能をコアビューから何らかの形で切り離す方法はありますか?

+0

**どのような意味でこの機能をコアビューから切り離す方法はありますか?**私はそれがCoreAppとどのように結びついているのか理解できませんでした。 あなたの要件を達成する最良の方法は、現在行っている方法に従うか、CoreAppからのモジュールの可視性を変更するxaml自体のビューを処理することだと思います。 – ViVi

答えて

1

これは、プラグインアーキテクチャを使用して行うことができます。 必要があります:

  • メインビューモデル。ロードされたプラグインとアクティブ化されたプラグインのコレクションを含みます。
  • プラグインを読み込む方法(MEFなど)。
  • DataTemplateSelector、これはプラグインのビューモデルのデータテンプレートを読み込みます。たとえば、プラグインのビューモデルM1_ViewModelM1.dllに配置されている場合は、M1\Views\M1.xamlからデータテンプレートをロードします。
  • メインビューにコントロール(ItemsControlListBoxなど)があります。このアイテムコントロールはプラグインコレクションを保持し、前述のセレクタを使用して適切なビューをロードします。
0

もっと一般的な解決策は、モジュールの基本クラスに「GetAvailableActions」のようなものを追加することです。次に、CoreAppは、モジュールがアクティブ化された後にそのメソッドを呼び出し、ビュー内の対応するボタンを生成することができます。

関連する問題