2015-08-23 4 views
1

Я использую Autofac с моим проектом WPF.Запросить время в WPF?

Во время разработки некоторых элементов управления я устанавливаю контекст данных этих элементов управления в модель представления, специфичную для дизайнера. Затем эта модель представления вводит некоторые службы через свой конструктор.

Это все хорошо. Но как я могу справиться с этим? Есть ли способ подключиться к событию и утилизировать мой контейнер Autofac, когда выполняется фаза времени разработки?

+0

Что вы подразумеваете под «фазой проектирования-времени»? По сути, это делается, когда вы закрываете редактор Visual Studio Studio XAML, и это не должно вас отличить, поскольку все компоненты будут освобождены в этот момент времени. – quetzalcoatl

+0

. Не означает ли событие загрузки событие? – Sievajet

+0

Проблема в том, что некоторые из моих сервисов (например, служба горячих клавиш) используют API-интерфейс RegisterHotkey. Для этой службы важно, чтобы она была незарегистрирована, когда Visual Studio была выполнена с моим дизайном. –

ответ

1

Вы сказали, что в комментариях:

Проблема заключается в том, что некоторые из моих услуг (например, звонок от горячей клавиши) использует RegisterHotkey API. Для этой службы важно, чтобы она была незарегистрирована, когда Visual Studio была выполнена с моим дизайном.

В общем, они не должны регистрироваться первым, когда ваш компонент находится в DesignTime. Designtime, если для предварительного просмотра макета и проверки режимов/состояний просмотра, а не для тестирования (хотя иногда это очень заманчиво).

Когда во время разработки вся интерактивность компонента должна быть отключена. VisualStudio пытается это сделать, вы заметите, что многие события/триггеры взаимодействия не вызывают или не передаются вашему компоненту. Однако иногда это бывает неудачно, как в случае Popups (и, следовательно, Dropdowns, Comboboxes и т. Д.), Вы иногда можете заставить фактически открыться во время разработки, и это дает очень странные/неустойчивые/otsafe результаты.

Вот почему вы не должны полностью доверять VS и режиму времени разработки, чтобы «просто работать». Вероятно, вы уже хорошо знаете, что плохо написанный компонент может в режиме desing попробовать, например, подключиться к базе данных. Это не должно произойти. Как правило.

Я бы сказал, реорганизуйте, что горячая клавиша регистрирует биты в какой-либо службе и заглушает/отменяет/отключает ее при обнаружении режима разработки.

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

Just FYI - Я никогда не исследовал это для WPF/XAML, но для WinForms каждый компонент может поставляться со специальным «дизайнерским» компонентом. VisualStudio использовала компонент 'designer' для подготовки, размещения, рендеринга, редактирования и сериализации редактируемого компонента. Вы могли бы написать дизайнер для своего настраиваемого элемента управления, и этот дизайнер мог отображать дополнительные окна с пользовательскими редакторами и т. Д. Наверное, на это наложили инструментальные средства, такие как DevExpress. Я не уверен, что есть аналогичная структура для компонентов XAML. Я сомневаюсь, что это одно и то же, но могут существовать некоторые подобные концепции. В любом случае, я не буду копаться в этом на вашем месте, а не за такие вещи. Этого не стоит, если вы действительно не хотите начинать расширять конструктор своими настраиваемыми плагинами.

Смежные вопросы