Компонентное приложение WPF MVVM в Office (Excel 2007) - PullRequest
2 голосов
/ 24 марта 2012

Я использую WPF MVVM для создания мастера в Excel 2007. Код мастера основан на этом интернационализированном мастере .

Поскольку WPF должен содержаться в ElementHost все мои представления являются пользовательскими элементами управления, там нет App.xaml.Вместо этого я создаю свое приложение WPF, когда создается экземпляр WinForm, и динамически связываю ресурсы моего приложения, как описано здесь .

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

Ответы [ 2 ]

1 голос
/ 13 сентября 2013

VSTOContrib - это отличная платформа с открытым исходным кодом для создания развязанных приложений в Office с WPF и MVVM. Помимо поддержки WPF, есть Denpendency Injection, управление панелями задач / лентами / обработкой событий как в контексте документов / электронных таблиц, так и в приложениях, стратегии обеспечения надлежащего распределения памяти COM Interop, помощь в установке одним щелчком ... и т.д.

По сути, все традиционные болевые точки разработки надстроек Office были устранены. Я обнаружил, что это изменило мой подход к работе надстроек Office.

0 голосов
/ 25 марта 2012

Я думаю, что Игорь Мучник дал длинный ответ на этот вопрос в следующей статье.

Офисные приложения через Prism of Unity

...