Ну, я не знаю ни о каком из окна решение, но создание такой возможности повторного использования диалога не так уж сложно. На самом деле, я несколько лет назад реализовал нечто подобное. Ну, это было в другой работе, так что у меня больше нет доступа к коду. Кроме того, я не могу запомнить все детали, но я могу попытаться дать вам основную идею такой реализации.
Вы можете создать DialogVm
, который предоставляет общие функции диалога.
Прежде всего, что необходимо для диалога в слое представления? Как правило, три кнопки, как ...
- Применить, Отменить и Закрыть (диалог модификации)
- Ok и Отменить или Да и Нет (Вопрос диалоговое окно)
- Ok (в случае отправки сообщения)
Таким образом, вы можете видеть три команды (ICommand
doc). Фактически, я создал реализацию DelegateCommand
(на основе this). ICommand.CanExecute
определяет, отключена или включена связанная кнопка. Если команда равна нулю, кнопка должна быть скрыта.
(Если вы используете правильный контроль макета, позиции кнопок регулируются должным образом, если кнопка не отображается.)
Чтобы обеспечить поддержку более четырех сценариев выше, я добавлено свойство CommandTitle
к DelegateCommand
, так что содержимое кнопки идет оттуда.
Следующая вещь, для которой требуется название объекта Title
. Поэтому добавьте это в DialogVm
.
Если вы хотите, чтобы было возможно закрыть диалоговое окно (только если это дочерний элемент Window
), выполнив команду, вы можете следовать this approach. Конечно, я использовал версию, которую я описал там. Но другие также выглядят многообещающими.
Последняя открытая точка - это свойство, которое представляет собой диалоговое содержимое. Если я правильно его помню, я использовал небольшой набор моделей просмотра и соответствующий DataTemplates
(и, конечно, TemplateSelector
, который предоставляет правильный шаблон на основе типа виртуальной машины). Конечно, вам также понадобится элемент управления ContentPresenter
в вашем диалоговом окне, в котором отображается DataTemplate
, предоставленный TemplateSelector
.
Это единственный downsite, это только хороший подход, если у вас есть только несколько различных диалоговых типов (например, вопрос, коробка Сообщение ...)
Использование довольно легко. Просто инициализировать DialogVm
экземпляр с желаемой ICommand
логики, DialogContentVm (однако вы хотите назвать его), передать его в DialogWindow (может быть, вы хотите использовать н. Отличается например, выпадающей) и представить его Пользователь.
Надеюсь, это поможет. Если вам нужна дополнительная информация или любая помощь, сообщите мне.
Это выглядит удобно, с некоторой адаптацией.Я не использую навигацию, просто меню и кнопки, но это просто небольшая беседа в этом сценарии. Позднее. Спасибо. – ProfK
Поскольку это приемлемое решение вашей проблемы, как насчет ее маркировки как ответа? –