Outlook 2007 Лента и MVP - PullRequest
       54

Outlook 2007 Лента и MVP

0 голосов
/ 24 мая 2010

Я работаю в Outlook 2007 VSTO Addin. Я добавил ленту с кнопкой. Я пытаюсь вызвать событие при нажатии кнопки. При событии NewInspector коллекции Application.Inspectors я должен иметь возможность подключить это событие ленты в Presenter.

Вопрос в том, как открыть Ленту Инспектора. Я пытался Globals.Ribbons.MyRibbon сделать это. Странно, это работает только для первого инспектора. Я тоже попробовал Globals.Ribbons[inspector].MyRibbon.

Похоже, что при создании NewInspector коллекция лент имеет 0 элементов, а загрузка ленты происходит только после выполнения обработчика события NewInspector.

Есть ли какое-либо событие, чтобы узнать, когда лента загружается ИЛИ Есть ли какой-нибудь альтернативный способ, где я могу сохранить бизнес-логику в Presenter вместо ее отображения в виде ленты.

1 Ответ

1 голос
/ 19 января 2011

Ответ с большим усилием ..

Насколько я могу судить, лента не экспонируется через vsto или com-взаимодействие, она также не имеет состояния, поэтому лента будет загружена один раз, независимо от того, сколько будет показано инспекторов.

Мне понадобилось много времени, чтобы изящно решить эту проблему, и это довольно сложный код. Я также должен упомянуть, что я решил заняться проблемой, используя XML ленты, а не дизайнер, я нашел, что дизайнер слишком ограничен.

Суть в том, что вам нужно создать собственную реализацию IRibbonExtensibility, а затем переписать обратные вызовы в XML-ленте, чтобы они вызывали методы в вашей имплантации IRibbonExtensibility. Затем вам нужно обработать загруженное событие и новое событие инспектора, чтобы вы могли связать их.

На самом деле это намного больше, и вы можете проверить мой код в проекте VSTO contrib. http://vstocontrib.codeplex.com/SourceControl/changeset/view/b35f26fdca15#src%2fOutlook.Utility%2fRibbonFactory%2fRibbonFactory.cs

Если вы создаете MVP-фреймворк для VSTO, напишите мне, поскольку мне было бы интересно посмотреть, что вы делаете.

...