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