在应用程序启动时在 OnNavigatedTo 中使用 IPageDialogService

Using IPageDialogService in OnNavigatedTo on app startup

我使用 Prism 模板包创建了一个 Prism Unity 应用程序,并向其中添加了另一个 View 和 ViewModel(OtherPage 和 OtherPageViewModel)。这是我的代码:

App.xaml.cs

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

    protected override void OnInitialized()
    {
        InitializeComponent();

        NavigationService.NavigateAsync("MainPage?title=Hello%20from%20Xamarin.Forms");
    }

    protected override void RegisterTypes()
    {
        Container.RegisterTypeForNavigation<MainPage>();
        Container.RegisterTypeForNavigation<OtherPage>();
    }
}

MainPageViewModel.cs

public class MainPageViewModel : BindableBase, INavigationAware
{
    private INavigationService _navigationService;
    private IPageDialogService _pageDialogService;
    public DelegateCommand NavigateToOtherPageCommand { get; set; }
    private string _title;
    public string Title
    {
        get { return _title; }
        set { SetProperty(ref _title, value); }
    }

    public MainPageViewModel(INavigationService navigationService,
                             IPageDialogService pageDialogService)
    {
        _navigationService = navigationService;
        _pageDialogService = pageDialogService;
        NavigateToOtherPageCommand = new DelegateCommand(async () => await NavigateToOtherPage());
    }

    public void OnNavigatedFrom(NavigationParameters parameters)
    {

    }

    public async void OnNavigatedTo(NavigationParameters parameters)
    {
        if (parameters.ContainsKey("title"))
            Title = (string)parameters["title"] + " and Prism";

        await _pageDialogService.DisplayAlertAsync("Message", "Message for the user", "Ok");
    }

    private async Task NavigateToOtherPage()
    {
        await _navigationService.NavigateAsync("OtherPage");
    }
}

OtherPageViewModel.cs

public class OtherPageViewModel : BindableBase, INavigationAware
{
    private IPageDialogService _pageDialogService;
    public OtherPageViewModel(IPageDialogService pageDialogService)
    {
        _pageDialogService = pageDialogService;
    }

    public void OnNavigatedFrom(NavigationParameters parameters)
    {
    }

    public async void OnNavigatedTo(NavigationParameters parameters)
    {
        await _pageDialogService.DisplayAlertAsync("Message", "Message for the user", "Ok");
    }
}

我正在尝试使用 IPageDialogService 在 MainPageViewModels 的 OnNavigatedTo 方法中向用户显示消息,但没有显示任何消息,也没有引发任何错误。

但是,如果我使用 NavigateToOtherPageCommand 从 MainPage 导航到 OtherPage,则消息会正确显示。为什么 IPageDialogService 在启动页面(即 MainPageViewModel)的 OnNavigatedTo 方法中不起作用?它似乎在任何其他页面(即 OtherPageViewModel)的 OnNavigatedTo 方法中工作正常。

尝试使用await Task.Yield()。有关此问题的更多信息,请参见 link:pageDialogService MainPage reference is always null inside OnNavigatedTo after app is launched