Расширение диалогового сервиса в Prism

#wpf #mvvm #dialog #prism

Вопрос:

На веб-сайте библиотеки Prism есть несколько заметок об упрощении API-интерфейсов диалоговых окон приложений. https://prismlibrary.com/docs/wpf/dialog-service.html

Допустим, у меня есть решение с несколькими проектами, основным проектом, модулями.Модуль 1, основной проект. Итак, создаю этот DialogServiceExtensions класс в своем основном проекте.

 public static class DialogServiceExtensions
{
    public static void ShowNotification(this IDialogService dialogService, string message, Action<IDialogResult> callBack)
    {
        dialogService.ShowDialog(nameof(NotificationDialog), new DialogParameters($"message={message}"), callBack, "notificationWindow");
    }
}
 

Я также включил NotificationDialog и NotificationDialogViewModel в свой основной проект

Я могу вызвать его в любом проекте/модуле, но вопрос в том, как я могу сказать prism, что NotificationDialog это ViewModel NotificationDialogViewModel .

Где я должен зарегистрировать диалоговое окно, чтобы иметь возможность использовать его через решение для отверстий? В моем приложении MainProject.xaml.cs, как обычно?

 protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterDialog<NotificationDialog, NotificationDialogViewModel>();
        }
 

Ответ №1:

Где я должен зарегистрировать диалоговое окно, чтобы иметь возможность использовать его через решение для отверстий? В моем приложении MainProject.xaml.cs, как обычно?

Если приложение хочет отобразить диалоговое окно, вы должны это сделать, так как модули по сути являются необязательными (их можно заменить после развертывания или они не должны существовать).

Если модуль хочет показать диалоговое окно (а не приложение), вы можете решить, является ли оно частью интерфейса вашего приложения для его модулей (затем поместите регистрацию в приложение) или нет (затем поместите его в модуль, каждый модуль, который его использует, то есть регистрации могут переопределять друг друга).