#c# #.net #navigation #prism
#c# #.net #навигация #prism
Вопрос:
У меня есть два региона. Область навигации и основная область.
Моя область навигации содержит две кнопки, которые вызывают метод RequestNavigate. Первая кнопка загружает представление без каких-либо параметров
this.tRegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.VInfoMainViewUri);
Вторая кнопка должна загрузить тот же вид с некоторыми параметрами
this.tRegionManager.RequestNavigate(RegionNames.MainRegion, new Uri(ViewNames.VInfoMainViewUri.OriginalString "" query.ToString(), UriKind.Relative));
Это работает нормально, если представление не загружено. Если загружено какое-либо представление, нажатие на любую кнопку ничего не приводит.
Я попытался удалить все активные представления из своего региона, но это приводит к ошибке
IViewsCollection col = tRegionManager.Regions[args.RegionName].Views;
foreach (var obj in col)
{
tRegionManager.Regions[args.RegionName].Remove(obj);
}
Область не содержит указанного представления.
Имя параметра: вид
Как я могу исправить эту проблему?
Ответ №1:
Если вы хотите создать новое представление, даже если в регионе уже существует представление того же типа, вам необходимо реализовать INavigationAware
интерфейс либо в вашем представлении, либо в вашей ViewModel (Prism сначала проверит представление, и если оно не реализуется, INavigationAware
оно также проверит ViewModel).
Вас конкретно интересует IsNavigationTarget
метод, который сообщает Prism, следует ли повторно использовать текущий экземпляр представления или следует создать другой экземпляр для удовлетворения запроса навигации. Итак, чтобы всегда создавать новое представление, вы должны сделать:
public class MyViewModel : INavigationAware {
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
{
return false;
}
void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
}
void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
}
}
Все это более подробно объясняется в главе 8 документации Prism 4; в них также есть иллюстрация того, как это работает.