Если я правильно понял ваш вопрос, то могу сказать, что вы используете несколько пользовательских элементов управления в одном пользовательском элементе управления для навигации с помощью триггеров.
Этот подход не верен. В основном вам нужна навигация между различными usercontorls.
Позвольте мне объяснить, как это сделать в Prism.
this.regionManager.RequestNavigate("your region name where the usercontrol will be put ",
navigationPath, NavigationCompleted);
NavigationCompleted - это метод обратного вызова: navigationPath: это путь к пользовательскому контролю, который вы хотите разместить в указанном регионе.
Надеюсь, что это понятно
Как вы сказали, вы новичок в призме, поэтому позвольте мне объяснить это ярко.
Как я вижу, у вас есть Просмотры (WalkAwayBehaviorU C, WakeUpOnApproachU C, NoLockOnPresenceU C, PeekDimmingU C, Настройки U C). Теперь позвольте мне рассмотреть эти представления в разных проектах или в одном и том же проекте, но вы хотите, чтобы они отображались в вашем регионе RegionNames.DetailOptionsRegion.
Теперь, чтобы сделать это, вы должны поместить все навигационные логи c в централизованное место. лучшее централизованное расположение может быть оболочкой. Итак, ShellViewModel.cs - это класс, в котором вы должны написать навигационную логику c.
Итак, создайте метод, подобный этому:
private void NavigationInitialized(string navigationPath)
{
if (string.IsNullOrEmpty(navigationPath))
{
throw new Exception();//or send proper message to UI
}
this.regionManager.RequestNavigate(RegionNames.DetailOptionsRegion,
navigationPath, NavigationCompleted);
}
private void NavigationCompleted(NavigationResult navigationResult)
{
}
Теперь вопрос в том, как получить это имя навигации в ShellViewModel.cs. Решением является EventAggregator.
В том месте, где вы хотите, чтобы usercontrol должен был перемещаться по записи.
this.eventAggregator.GetEvent<Navigated>().Publish("WalkAwayBehaviorUC");
теперь класс перемещаемых событий должен выглядеть следующим образом:
public class Navigated : PubSubEvent<string>
{
}
Теперь вы должны подписаться на это Navigated Event в ShellViewModel.cs
Так что в конструкторе ShellViewModel.cs вы должны написать:
this.eventAggregator.GetEvent<Navigated>().Subscribe(NavigationInitialized);