powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как заставить RequestNavigate (PRISM) регистрировать представления с их именем?
4 сообщений из 4, страница 1 из 1
Как заставить RequestNavigate (PRISM) регистрировать представления с их именем?
    #37914569
hex.style
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача: заставить RequestNavigate регистрировать представления с их собственным именем.
Это необходимо для последующего обращения к ним с помощью Region.GetView(contract)
Использование AutoPopulateExportedViewsBehavior с ViewExport регистрирует представления в регионах сразу при загрузке контейнера.
Код моей вьюшки:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[Export("MyContentView")]
[PartCreationPolicy(CreationPolicy.Shared)]
public partial class MyContentView: UserControl, IBook
{
    public string Header { get; set; }
    public MyContentView()
    {
        this.Header = "Some Title";
        InitializeComponent();
    }
}



По нажатию кнопки вызывается событие:
Код: c#
1.
2.
3.
4.
5.
private void OnShowExecuted(ViewData viewData)
{
    Uri viewNav = new Uri(viewData.View, UriKind.Relative);
    regionManager.RequestNavigate(RegionNames.ContentRegion, viewNav);
}



Затем RegionManager делает что-то вроде этого:
Код: c#
1.
RegionManager.Regions[RegionNames.ContentRegion].Add(myView);


Мне же нужно заставить его делать это:
Код: c#
1.
RegionManager.Regions[RegionNames.ContentRegion].Add(myView, "MyContentView");


Чтобы потом вызвать вьюшку так:
Код: c#
1.
RegionManager.Regions["MainRegion"].GetView("MyContentView");



Ай нид хэлп! =)
...
Рейтинг: 0 / 0
Как заставить RequestNavigate (PRISM) регистрировать представления с их именем?
    #37915107
hex.style
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел статью про RequestNavigate: http://blogs.msdn.com/b/kashiffl/archive/2010/10/04/prism-v4-region-navigation-pipeline.aspx
Представлена последовательность вызова методов.



Реализовал метод ConfirmNavigationRequest интерфейса IConfirmNavigationRequest.
Там прописываю:
Код: c#
1.
2.
        if (navigationContext.NavigationService.Region.GetView(navigationContext.Uri.OriginalString) == null) { }
                navigationContext.NavigationService.Region.Add(???, navigationContext.Uri.OriginalString);


И тут новый затык: как динамически получать представление из экспорта, зная его имя?
Было бы полезно что-нибудь из оперы: getExportedInstanceFromString(navigationContext.Uri.OriginalString)
Только есть ли стандартные методы реализации чего-то подобного?
...
Рейтинг: 0 / 0
Как заставить RequestNavigate (PRISM) регистрировать представления с их именем?
    #37915200
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитай документацию и посмотри примеры.
IConfirmNavigationRequest служит совсем для других целей:
- для блокирования навигации
- обработки смены view

Если переход не запрещен(callback возвращает true), то Navigation Service c помощью DI контейнер создает View с нужным именем.
Для этого View должно быть зарегистрировано при загрузке модуля в Unity контейнере, а при использовании MeF, иметь соответствующий атрибут - View
...
Рейтинг: 0 / 0
Как заставить RequestNavigate (PRISM) регистрировать представления с их именем?
    #37917036
hex.style
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно чем и занимаюсь.

Если ты знаешь, как отловить загрузку View с помощью RequestNavigate другим путем, скажи, пожалуйста. А если нет, то чем плох для этих целей ConfirmNavigationRequest? =)

В общем, пришел к выводу, что этот момент в PRISM как-то не особо продуман. И решил перегружать View при переходе на нее:
Код: c#
1.
2.
3.
            if (navigationContext.NavigationService.Region.Views.Contains(this) && navigationContext.Uri.OriginalString == this.GetType().Name){
                navigationContext.NavigationService.Region.Remove(this);
            }


Переопределил RegionAdapter для своего элемента региона. Там срабатывает событие region.ActiveViews.CollectionChanged в методе protected override void Adapt(IRegion region, BooksContainer books), в котором уже и определяю логику для добавляемых и удаляемых элементов.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как заставить RequestNavigate (PRISM) регистрировать представления с их именем?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]