我尝试了不同的方法来改变我的MainPage,但它没有发生。基本上当我的应用程序启动时,它需要执行一些异步任务来初始化所有内容,然后获取要显示的真实主页面。我首先在App.cs.中尝试了一个事件处理程序。我可以确认事件处理程序在我的调试器中启动。但是,切换主页的代码没有成功完成。我的UI没有任何变化。此代码如下:
private void UnitStatusModelChanged(object sender, EventArgs e)
{
UnitStatusModel = _unitStatusMonitor.UnitStatusModel;
UnitStatusViewModel = new UnitStatusViewModel(UnitStatusModel, InputResourceHandler);
MainPage = new MainTabbed(UnitStatusViewModel, InputResourceHandler);
Debug.WriteLine("Switched page to " + UnitStatusModel.Version.Name);
}
protected override void OnStart()
{
_unitStatusMonitor.UnitStatusChanged += new UnitStatusModelChangedEventHandler(UnitStatusModelChanged);
_commandQueue.StartQueue();
}
我想也许以这种方式设置MainPage不是要走的路。因此,我尝试将MainPage设置为空白的NavigationPage,然后在应用程序准备就绪后将模型页面推到顶部。这也没有效果。
var newPage = new MainTabbed(
new UnitStatusViewModel(_unitStatusModel, inputResourceHandler),
inputResourceHandler
);
App.Current.MainPage.Navigation.PushModalAsync(newPage);
我可以确认,如果我使用MainTabbed页面启动应用程序,页面会显示,因此它不应该是MainTabbed的问题。同样,我还在调试器中验证了这些代码行正在执行,没有抛出异常。仍然,没有更改MainPage。是什么给了什么?
答案 0 :(得分:1)
在异步完成后,当您调用PushModalAsync(或任何UI事物)时检查您的线程。确保它在主线程上。