2012-03-24 15 views
2

私は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

答えて

1

VSTOContrib WPFとMVVMとOfficeのデカップリングアプリケーションを構築するための優れたオープンソースのフレームワークです。 WPFのサポートだけでなく、ドキュメント/スプレッドシートとアプリケーションコンテキストの両方でのタスクペイン/リボン/イベント処理の管理、COM Interopメモリ割り当ての確実な管理方法、ワンクリックインストールのサポートなど、Deppendency Injectionがあります。

基本的に、Officeアドイン開発の従来の苦境はすべて対処されています。私はそれがOfficeアドイン作業へのアプローチを変えていることがわかりました。

関連する問題