Prism RequestNavigate не работает - PullRequest
7 голосов
/ 08 мая 2011

В каждом представлении

public partial class View2 : UserControl, IRegionMemberLifetime, INavigationAware
{

  public bool KeepAlive
  {
    get { return false; }
  }

  bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
  {
    return true;
  }
  void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
  {
    // Intentionally not implemented.
  }
  void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
  {
    this.navigationJournal = navigationContext.NavigationService.Journal;
  }

}

Инициализация:

container.RegisterType<object, View1>("View1");
container.RegisterType<object, View2>("View2");

regionManager.RequestNavigate("Window1", new Uri("View1", UriKind.Relative));
regionManager.RequestNavigate("Window2", new Uri("View2", UriKind.Relative));

Я следую руководству разработчика, оно не меняет представление, если оно существует.

Ответы [ 3 ]

11 голосов
/ 11 мая 2011

Вы уверены, что представление заполняется контейнером?

Я бы предложил вам предоставить обратный вызов для метода RequestNavigate, чтобы вы могли отслеживать, что происходит с вашим представлением через NavigationResult:

regionManager.RequestNavigate
(
    "Window1",
    new Uri("View2", UriKind.Relative),
    (NavigationResult nr) => 
    {
        var error = nr.Error;
        var result = nr.Result;
        // put a breakpoint here and checkout what NavigationResult contains
    }
);
2 голосов
/ 30 апреля 2013

Это ваша проблема:

bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext) => true;

Если вы хотите, чтобы новое представление создавалось и добавлялось в ваш регион каждый раз, когда вы звоните RequestNavigate(), IsNavigationTarget() должно возвращать false вместо true.

2 голосов
/ 20 мая 2011

Я видел, что, если я реализую IConfirmNavigateRequest и не вызываю ContinutationCallback (true), навигация завершится неудачно.

public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
    {
        //***Should have actual logic here
        continuationCallback(true);
    }

Хотя это может быть не так, я выяснил это путем отладки черезКод призмы.Я бы посоветовал вам сделать это, чтобы выяснить вашу проблему.Удалить ссылки на следующее в каждом соответствующем проекте.

  • Microsoft.Practices.Prism
  • Microsoft.Practices.Prism.Interactivity
  • Microsoft.Practices.Prism.MefExtensions
  • Microsoft.PracticesPrism.UnityExtensions

Затем добавьте проекты из каталога PrismLibrary DeskTop, Silverlight или Phone (где вы установили PRISM).Затем сделайте ссылку на эти проекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...