2013-02-26 2 views
0

Извините за название хромого вопроса, сложно описать проблему в одном предложении. Проблема заключается в следующем:UriMapper и перезаписан URI-вопрос

Мне нужно убедиться, что пользователь принял лицензионное соглашение, прежде чем он сможет начать использовать приложение. Моя идея - использовать UriMapper, который будет проверять, согласился ли пользователь ранее, а если нет, перенаправить его или ее на страницу лицензионного соглашения.

public override Uri MapUri(Uri uri) 
    { 
     if(!settingsStorage.IsLicenseAgreementAccepted) 
      return LicenseAgreementPage; 
     return uri; 
    } 

Однако на странице лицензионного соглашения, если переопределить OnNavigatedTo, я вижу, что навигационный URI не URI текущей страницы, а не-сопоставляются URI, например, адрес моей главной страницы. Поэтому, когда я пытаюсь перейти на эту главную страницу, ничего не происходит, поскольку служба навигации думает, что я уже там.

public partial class LicenseAgreementPage : PhoneApplicationPage 
{ 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); // somehow e.Uri equals to /MainPage.xaml, instead of /LicenseAgreementPage.xaml 
    } 
} 

Как преодолеть это? Не применим ли UriMapper здесь? Или есть какое-то обходное решение?

Спасибо.

+0

Кажется, что это должно быть выполнимо ... странно что вы не получаете правильный URI, может быть, посмотрите на [этой статье MSDN] (http://msdn.microsoft.com/en-us/library /windowsphone/develop/jj206987(v=vs.105).aspx), он описывает аналогичный подход для запуска конкретной страницы приложения wp8 на основе данного URI. – Depechie

ответ

0

У меня была аналогичная проблема, когда некоторые страницы требовали от пользователя входа в систему. Если пользователь попытался перейти на страницу, требующую входа в систему, они были перенаправлены на страницу входа в систему, а затем отправлены обратно. Может быть, вы можете использовать ту же стратегию?

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 

     if (Requirelogin && !CurrentAppManager.IsUserLoggedIn) 
     { 

      // Transfer URI to the login page and save it, after successful login, 
      // the login page navigate back to the stored URI 
      ((PhoneApplicationFrame)Application.Current.RootVisual).Navigate(new Uri("Login?" + Helpers.URI + "=" + e.Uri.ToString(), UriKind.Relative)); 
     } 

     // if the user has just come from Login 
     // remove it from the stack so they dont hit when pressing back 
     var entry = NavigationService.BackStack.FirstOrDefault(); 

     if (entry != null && entry.Source.OriginalString.Contains("Login")) 
     { 
      NavigationService.RemoveBackEntry(); 
     } 
    } 
+0

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

+0

Да, но я сделал это, если все мои страницы наследуются от базовой страницы, которая могла бы обрабатывать этот вид вопросы. –

Смежные вопросы