Проблема навигации C # Prism - PullRequest
1 голос
/ 13 апреля 2011

У меня есть два региона.Регион навигации и основной регион.

Моя область навигации содержит две кнопки, которые вызывают метод 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);

}

В регионе нет указанного представления.Имя параметра: view

Как я могу исправить этот пробник?

1 Ответ

6 голосов
/ 13 апреля 2011

Если вы хотите создать новое представление, даже если в регионе уже существует существующее представление того же типа, вам нужно реализовать интерфейс INavigationAware либо в вашем View, либо в вашей ViewModel (Prism сначала проверит представлениеи если он не реализует INavigationAware, он также проверит ViewModel).

Вас особенно интересует метод IsNavigationTarget, который сообщает Prism, следует ли повторно использовать текущий экземпляр View,или если другой экземпляр должен быть создан для удовлетворения запроса навигации.Таким образом, чтобы всегда создавать новое представление, вы должны сделать:

public class MyViewModel : INavigationAware {
    bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
    {
        return false;
    }

    void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
    {
    }

    void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
    {
    }
}

Все это более подробно объясняется в главе 8 документации Prism 4;у них также есть иллюстрация того, как это работает .

...