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

Xamarin.forms 在应用程序启动时在OnNavigatedTo中使用IPageDialogService,xamarin.forms,prism,Xamarin.forms,Prism,我使用Prism模板包创建了一个Prism Unity应用程序,并向其中添加了另一个视图和视图模型(OtherPage和OtherPageViewModel)。这是我的代码: 代码文件 OtherPageViewModel.cs 我试图使用IPageDialogService在MainPageViewModels的OnNavigatedTo方法中向用户显示消息,但未显示任何消息,也未引发任何错误 但是,如果使用NavigateToOtherPageCommand从MainPage导航到其他页面,

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

代码文件 OtherPageViewModel.cs 我试图使用IPageDialogService在MainPageViewModels的OnNavigatedTo方法中向用户显示消息,但未显示任何消息,也未引发任何错误


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

尝试使用
等待任务。Yield()
。有关此问题的更多信息,请访问此链接:

我遇到了相同的问题-您是否找到了原因或解决方法?恐怕我没有发现,我也遇到了相同的问题-有什么想法吗?可能是我第一次使用收益率。永远不会找到这个解决方案。非常感谢你。
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>();
    }
}
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");
    }
}
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");
    }
}