Я пытаюсь реализовать диалоговое окно в приложении WPF + PRISM + MVVM. на данный момент мне удалось создать пример сервиса, и каждый модуль может использовать этот сервис для отображения любого вида в окне, но проблема в этом очень необычная и не может заставить его работать.
Вот контракт с оконной службой.
public interface IUiDialogueService : IDisposable
{
void Show<TView>(TView view) where TView : IViewModel;
}
public class UiDialogueService : IUiDialogueService, IDisposable
{
private Window _dialogueWindow;
#region Implementation of IUiDialogueService
public void Show<TView>(TView view) where TView : IViewModel
{
_dialogueWindow = new Window
{
SizeToContent = SizeToContent.WidthAndHeight,
ResizeMode = ResizeMode.NoResize,
ShowInTaskbar = false,
Content = view.View
};
_dialogueWindow.ShowDialog();
_dialogueWindow = null;
}
}
Вот как я могу получить доступ к моей оконной службе из модуля.
private void OnStartWizard()
{
_dialogueService.Show(ServiceLocator.Current
.GetInstance<IOrgManagementOrganizatioSetupViewViewModel>());
}
все работает хорошо, когда я впервые открываю окно, но после того, как я закрываю его и открываю то же или другое представление внутри окна, я возвращаюсь к следующему исключению
Указанный элемент уже является логическим дочерним элементом другого элемента. Сначала отключите его.
это исключение выдается следующим кодом.
_dialogueWindow = new Window
{
SizeToContent = SizeToContent.WidthAndHeight,
ResizeMode = ResizeMode.NoResize,
ShowInTaskbar = false,
Content = view.View
};
Может ли кто-нибудь объяснить, что здесь происходит не так, и есть ли лучший способ получить дочернее (диалоговое) окно в MVVM architectur?