Composite view - просмотр уже существует в области ошибки

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

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

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

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

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

2

2 ответы

Если вы используете MEF, и ваше представление - Singleton i.e.

[PartCreationPolicy(CreationPolicy.Shared)]

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

public override bool IsNavigationTarget(NavigationContext navigationContext)

{return false;}

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

Change [PartCreationPolicy(CreationPolicy.Shared)] to [PartCreationPolicy(CreationPolicy.NonShared)]

и все готово.

1
добавлено

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

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

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

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot