Призма не перемещается на страницу при ожидаемом способе перед навигацией - PullRequest
1 голос
/ 25 февраля 2020

Я использую Xamarin.Forms 4.4.0.9916 и Prism.Unity.Forms 7.2.0.1422

В базовом приложении c Prism я хотел бы выполнить задачу перед переходом к MainPage (в качестве примера я заменяю задача с await Task.Delay(500);)

Проблема в том, что приложение не переходит на MainPage. Если я закомментирую await Task.Delay(500);, то приложение перейдет к MainPage

Итак, в чем проблема с этим кодом? Как я могу иметь ожидаемый метод перед переходом на главную страницу?

Когда await Task.Delay(x); быстрый (т.е. await Task.Delay(50);), то приложение переходит на MainPage

public partial class App : PrismApplication
{
    public App() : this(null) { }
    public App(IPlatformInitializer initializer = null) : base(initializer) { }

    protected override async void OnInitialized()
    {
        InitializeComponent();

        await Task.Delay(500);

        await NavigationService.NavigateAsync(new Uri("http://www.somewhere.com/MainPage", UriKind.Absolute));
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<NavigationPage>();
        containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
    }
}

1 Ответ

0 голосов
/ 25 февраля 2020

Здесь есть несколько способов сделать что-то, однако вы захотите реализовать что-то вроде LoadingPage. При необходимости это может быть довольно «тупая» страница (без ViewModel). В качестве альтернативы вы можете перенести свои логи запуска c в LoadingPageViewModel, а затем перейти оттуда.

protected override async void OnInitialized()
{
    // This ensures the MainPage is set and prevents the app from being killed
    // by the platform. Also provides better User Experience...
    await NavigationService.NavigateAsync("/LoadingPage");
    await Task.Delay(TimeSpan.FromSeconds(30));
    await NavigationService.NavigateAsync("/MainPage");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...