私はWPF MVVMを使用してExcel 2007でウィザードを作成しています。ウィザードコードはthis internationalized wizardに基づいています。Office(Excel 2007)アドインでWPF MVVMコンポジットアプリケーション
WPFがElementHostに含まれている必要があるため、すべてのビューがユーザーコントロールです.App.xamlはありません。代わりに、ホストWinFormがインスタンス化され、hereと記述されているように自分のアプリケーションリソースを動的にバインドするときにWPFアプリケーションを作成します。
Private _wpfApplication As Windows.Application
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' WPF application instance
_wpfApplication = Application.Current()
If Application.Current Is Nothing Then
_wpfApplication = New Application()
End If
' Merge in your application resources.
_wpfApplication.Resources.MergedDictionaries.Add(TryCast(Application.LoadComponent(New Uri("Pitchbook.Excel.ChartWizard;Component/Themes/Generic.xaml", UriKind.Relative)), ResourceDictionary))
End Sub
Private Sub ChartWizard_Load(sender As Object, e As System.EventArgs) Handles Me.Load
' Create the WPF UserControl.
Dim uc As New MainWindow()
' Assign the WPF UserControl to the ElementHost control's child property.
ehMaster.Child = uc
End Sub
これはこれまで作成した1つのモジュールで問題なく動作します。私は作成するモジュールが多く、各モジュール用のWinFormコンテナを用意するのではなく、Prismを使用して複合アプリケーションを作成してアプリケーションを次のレベルにしたいと思っています。私は何とかApp.xamlと同様の役割を果たす汎用のWinFormを持っていたいと思います。ユーザーがリボン上のボタンをクリックすると、このジェネリックホストWinFormを起動することができます。WinFormはShell.xamlをElementHostにバインドし、ブートストラップを使用して、リボンボタンをモジュールのセットにマッピングするいくつかのパラメータまたは設定に基づいて関連モジュールをロードします。汎用ホストコンテナにロードする必要があります。
私はこれを行うためのロジックに苦労しています。このアプローチの可能性と、可能な限り最良の方法があるかどうかについて意見を出したいと思っていました。基本的には、既存の複合アプリケーションアーキテクチャに2つのレイヤーを赤色で追加する必要があります。
http://www.patternjuggler.org/downloads/officecompositeapp.jpg