Здесь нет ни одного хорошего ответа. Один из подходов, который я использовал в прошлом, - это центральный DialogService
или PopupService
, который управляет созданием и отображением диалогов. Это вдвойне необходимо, потому что попытка одновременно открыть два ContentDialog
в одном и том же потоке вызывает исключение (и ContentDialog
является рекомендуемым способом отображения модального содержимого).
Вы можете передать этот класс Service в вашу ViewModel, в зависимости от того, что у вас есть ваши viewmodels, разрешающие зависимости, а затем просто использовать эту службу для отображения вашего всплывающего окна.
Мое предложение в двух словах:
- Создайте свой собственный
ErrorContentDialog
, который наследуется от ContentDialog
(или просто используйте базовый c ContentDialog
, если вам этого достаточно) - Создайте
DialogService
, который управляет создание ContentDialogs
(например, ограничение для одного диалогового окна на поток, упомянутое выше) - Напишите метод
ShowErrorDialog()
для DialogService
. В зависимости от того, как вы хотите смоделировать ваши данные, у вас может быть несколько простых параметров, или, возможно, вы можете создать целый ErrorContentDialogViewModel
, который вызывающий абонент отвечает за создание и передачу. - Предоставьте свой
ItemsViewModel
доступ к этому DialogService
каким-то образом.