Составное представление - представление уже существует в области ошибки - PullRequest
2 голосов
/ 27 октября 2011

Я работаю над приложением WPF / Prism 4 / AvalonDoc.

Одно из моих представлений очень сложное, и ViewModel становится огромной и неуправляемой.Поэтому я решил разделить его на более мелкие виды с их собственными ViewModel.

Я поместил область в представление и загрузил вспомогательное представление в эту область с помощью метода regionManager.RegisterViewWithRegion из конструктора «master» ViewModel.

Это работает так же, как и ожидалось, когда загружен только один экземпляр представления.Но когда я открываю второй экземпляр этого экрана (он загружается как DocumentContent в DocumentPane AvalonDock), я получаю сообщение об ошибке «Просмотр уже существует в регионе».

Я хотел бы избежать присвоения региону уникального имени, есливозможный.Есть ли способ указать, что я добавляю подвид к конкретному экземпляру "основного" вида?Любой совет, как это сделать?

Ответы [ 2 ]

1 голос
/ 22 марта 2013

Если вы используете MEF, и ваш взгляд - Синглтон, т.е.

[PartCreationPolicy(CreationPolicy.Shared)]

, а ваш INavigationAware возвращает false при

public override bool IsNavigationTarget(NavigationContext navigationContext)

{return false;}

Вы получите эту ошибку.

Измените [PartCreationPolicy(CreationPolicy.Shared)] на [PartCreationPolicy(CreationPolicy.NonShared)]

и все готово.

0 голосов
/ 28 октября 2011

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

Пример.У вас есть управление пользователями.Одной моделью просмотра является список всех пользователей.Этот список содержит модели пользовательского просмотра.И каждая модель представления пользователя содержит экземпляр модели представления прав пользователя, который сам по себе является списком моделей представления, которые представляют только одно право пользователя.Таким образом, логика того, как представить специальное право пользователя, входит в модель соответствующего представления, а не в "основную" модель представления списка пользователей.Таким образом, вы можете разделить свои проблемы на разные модели представлений.

Связать с этими моделями представлений так же просто, как и иметь только одну модель представлений.Просто путь становится немного длиннее.Когда контекст данных является моделью представления списка пользователей из приведенного выше примера, возможно, вы можете иметь путь привязки, например CurrentUserVM.UserRightsVM, чтобы получить список прав пользователя.

...