Композитний вигляд - перегляд вже існує в регіоні помилка

Я працюю над програмою WPF/Prism 4/AvalonDoc.

Один з моїх поглядів дуже складний, і ViewModel стає величезним і незмінним. Тому я вирішив розділити його на менші види з власними ViewModels.

Я розмістив регіон у представленні та завантажував підроду в цей регіон, використовуючи метод regionManager.RegisterViewWithRegion з конструктора "master" ViewModel.

Це працює так само, як очікується, коли завантажується лише один екземпляр перегляду. Але коли я відкриваю другий екземпляр цього екрана (завантажується як DocumentContent в DocumentPane AvalonDock), я отримую помилку «Перегляд вже існує в регіоні».

Я хотів би уникнути надання регіону деякого унікального імені, якщо це можливо. Чи є спосіб вказувати, що я додаю підгляд до певного екземпляра "головного" представлення? Будь-який поради щодо того, як це зробити?

2

2 Відповіді

Якщо ви використовуєте MEF, і ваша точка зору - Singleton, тобто

[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
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug