Как спроектировать MVFM UserControl WPF и разместить его в Windows Forms ElementHost? - PullRequest
1 голос
/ 23 мая 2011

У меня есть несколько вопросов о WPF + MVVM + ElementHost. Я пытаюсь объяснить это настолько ясно, что могу.

  1. Я создаю надстройку (VSTO 2010), это означает, что мне нужен ElementHost для размещения WPF.

  2. Первый пункт означает, что мой WPF может быть только UserControl (WPF)

  3. По пунктам 1 и 2;

    Возможно построить MVVM WPF (UserControl) с Popup (Children), подобным этому One , и который может быть размещен в ElementHost?

Надеюсь, мой Вопрос достаточно ясен! Спасибо за помощь.

1 Ответ

4 голосов
/ 23 мая 2011

Вы, конечно, можете, хотя есть несколько ошибок гоча.

У меня были проблемы с тем, что мой элемент управления WPF не рисовался при первоначальном отображении, поэтому я обошел его, настроив ширину, когда установлен дочерний элемент. Смотри http://vstocontrib.codeplex.com/SourceControl/changeset/view/50a83624e34d#src%2fVSTOContrib.Core%2fWpf%2fWpfPanelHost.cs

Следующее - это приложение в стиле MVVM, которое вы хотите создать, главная проблема вокруг этого - модель VSTO вокруг окон / документов / пользовательских панелей задач, все разные, одна основана на открытой книге (контекст), другая - окна ( view) и настраиваемые панели задач также основаны на окнах (view). Приложения в стиле MVVM больше строятся вокруг текущего контекста или текущей открытой книги. Я уже некоторое время работаю над VSTO contrib, чтобы решить эту проблему, он даже дает MVVM-подобные привязки при объявлении лент RibbonXML, если вам нужна поддержка ленты , Возьмите его по номеру http://vstocontrib.codeplex.com и, пожалуйста, дайте мне знать, действительно ли это вам поможет.

И, наконец, всплывающее окно, вас ничто не останавливает, но в Office 2007 вы обнаружите, что при повторном открытии окна Office, вероятно, произойдет сбой. Следующий код сделает ваше окно WPF более плавным.

if (System.Windows.Application.Current == null)
    new Application { ShutdownMode = ShutdownMode.OnExplicitShutdown };
else
    System.Windows.Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;

В основном, когда вы отображаете первое окно, все хорошо, но WPF запускает приложение, которое по умолчанию закрывается, когда закрывается последнее окно. Поэтому, когда ваше окно закрывается, и вы пытаетесь открыть его снова, WPF взорвется: P

...