Я достаточно новичок в Prism и в настоящее время переписываю одно из наших существующих приложений, используя Prism в качестве доказательства концептуального проекта.
Приложение использует MVVM с первым подходом ViewModel: наша ViewModel разрешается контейнером, и сервис IViewResolver
выясняет, к какому виду он должен быть подключен (используя, помимо прочего, соглашения об именах).
Код (для добавления вида в управление табуляцией) в данный момент выглядит примерно так:
var vm = (get ViewModel from somewhere)
IRegion reg = _regionManager.Regions["MainRegion"];
var vw = _viewResolver.FromViewModel(vm); // Spins up a view and sets its DataContext
reg.Add(vw);
reg.Activate(vw);
Все работает отлично, однако я бы очень хотел использовать навигационную систему Prism, чтобы сделать все это за меня, чтобы я мог сделать что-то подобное:
_regionManager.RequestNavigate(
"MainRegion",
new Uri("NameOfMyViewModel", UriKind.Relative)
);
и заставить Prism развернуть ViewModel + View, настроить DataContext и вставить вид в регион.
Я 'добился некоторого успеха, создав DataTemplates, ссылающиеся на типы ViewModel, например:
...и попросил модуль добавить соответствующий словарь ресурсов в ресурсы приложения при инициализации модуля, но это кажется немного чепухой.
Есть ли способ эффективно взять на себя создание вида из Prism, чтобы при вызове RequestNavigate
я мог посмотреть на поставляемый Uri
и на его основе раскрутить вид/видо-модель? Существует перегрузка RegionManager.RegisterViewWithRegion
, которая принимает делегата, который позволяет вам предоставить вид самостоятельно, и я думаю, что мне нужно что-то вроде этого.
Я думаю, что мне может понадобиться поставить свою собственную IRegionBehaviorFactory
, но я не уверен в том, что с этим связано (или даже если я на правильном пути!).
Любая помощь оценена!
-- примечание: Первоначально размещено по адресу сайт