Невозможно зарегистрировать виртуальную машину через Prism Navigation

#prism #.net-core-3.1 #wpf-core

#prism #.net-core-3.1 #wpf-ядро

Вопрос:

Я создаю приложение WPF Core 3.1 с использованием Prism 7. В одном из представлений я пытаюсь зарегистрировать модель представления для навигации PRISM через:

 containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>();
  

И при необходимости я делаю запрос в службу навигации PRISM для перехода к представлению с помощью Region Manager

 _regionManager.RequestNavigate(RegionNames.ContentRegion, "ViewA");
  

Навигация к представлению завершена, и я могу видеть представление в определенной области, но модель представления не назначена представлению.

Я попытался вручную зарегистрировать модель представления с помощью ViewModelLocationProvider, но модель представления по-прежнему не назначена.

 ViewModelLocationProvider.Register<ViewA, ViewAViewModel>();
  

Но если я использую свойство автоматической настройки PRISM в представлении, тогда модель представления обнаруживается и присваивается представлению.

 prism:ViewModelLocator.AutoWireViewModel="True"
  

Просмотр класса модели, объявленного с помощью интерфейса IConfirmNavigationRequest, необходимого для обработки запросов навигации

 public class ViewAViewModel : RegionViewModelBase , IConfirmNavigationRequest
  

Я не могу понять, чего мне здесь не хватает.

Ответ №1:

Единственное, что я вижу неправильно, это то, что вам нужно будет использовать интерфейс INavigationAware , а не IConfirmNavigationRequest . Я предполагаю RegionViewModelBase BindableBase , что это уже реализовано.

 public class ViewAViewModel : RegionViewModelBase, INavigationAware
  

Комментарии:

1. IConfirmNavigationRequest реализует интерфейс INavigationAware.

2. @Bluecomb Я просто следил за тем, что Брайан Лагунас дает в своих руководствах. Обычно, когда что-то не работает, я сводлю это к «базовой» форме, проверяю, работает ли это, а затем начинаю изменять до такой степени, что это больше не работает, и пытаюсь выяснить, почему. Как я уже упоминал, я не понимаю, почему код не будет работать, если вы все сделали правильно. Извините, я не смог больше помочь.