在应用程序启动时在 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
我使用 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