在Office(Excel 2007)加载项中的WPF MVVM组合应用程序

问题描述:

我使用WPF MVVM在Excel 2007中创建向导。该向导代码基于this internationalized wizard在Office(Excel 2007)加载项中的WPF MVVM组合应用程序

因为WPF必须包含在ElementHost之内,所有我的视图都是用户控件,所以没有App.xaml。相反,当主机WinForm被实例化时,我创建了我的WPF应用程序,并按照here所述动态绑定了我的应用程序资源。

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 

这对我迄今为止创建的一个模块工作正常。我有很多模块可以创建,而不是为每个模块创建一个WinForm容器,我希望通过使用Prism创建一个复合应用程序来使应用程序更上一层楼。我想以某种方式拥有一个通用的WinForm,它对App.xaml起着类似的作用。当用户单击我的功能区上的按钮时,我可以启动该通用主机WinForm将Shell.xaml绑定到ElementHost,并使用引导程序基于某些参数或配置将映射功能区按钮映射到一组模块的相关模块应该加载到通用主机容器中。

我很努力的这样做的逻辑,我想获得一些关于这种方法的可行性的意见,如果它是可能的最好的方式可能会做。基本上我需要将这两层以红色添加到现有的复合应用程序体系结构中。

http://www.patternjuggler.org/downloads/officecompositeapp.jpg

我觉得伊戈尔Moochnick走一段很长的方式来回答这个问题与下面的文章。

Office Applications via Prism of Unity

VSTOContrib是建立在办公室与WPF和MVVM解耦应用的优秀的开源框架。除了对WPF的支持外,还有对文档/电子表格和应用程序上下文中的任务窗格/功能区/事件处理的Denpendency Injection管理,确保正确管理COM Interop内存分配的策略,以及单击安装的帮助......等等。

从本质上讲,所有传统的Office加载项开发的痛点已经得到解决。我发现它已将我的方法转变为Office加载项工作。