xamarin - 如何从 MasterPage 推送异步?
问题描述
我有目前使用事件驱动方法的 MasterPage,如下所示:
MasterPage.xaml.cs
private void TapHome_Tapped(object sender, EventArgs e)
{
Detail = new NavigationPage(new HomePage());
IsPresented = false;
}
应用程序.xaml.cs:
public App()
{
InitializeComponent();
if (!string.IsNullOrEmpty(Preferences.Get(Constant.Setting_AccessToken, "")))
{
MainPage = new MasterPage();
}
else if (string.IsNullOrEmpty(Preferences.Get(Constant.Setting_UserEmail, "")) &&
string.IsNullOrEmpty(Preferences.Get(Constant.Setting_Password, "")))
{
MainPage = new NavigationPage(new LoginPage());
}
}
由于我们试图迁移到 MVVM 方法。我们试图更改代码:
MasterPage.xaml.cs
public MasterPage()
{
InitializeComponent();
BindingContext = _viewModel = new MasterViewModel()
{
Navigation = Navigation
};
//IsPresented = false;
}
MasterViewModel.cs:
public ICommand HomeCommand { get; private set; }
public ICommand ActivitiesCommand { get; private set; }
public ICommand ChangePasswordCommand { get; private set; }
public ICommand LogoutCommand { get; private set; }
public MasterViewModel()
{
HomeCommand = new Command(async () => await GoToHome());
ActivitiesCommand = new Command(async () => await GoToActivities());
ChangePasswordCommand = new Command(async () => await GoToChangePassword());
LogoutCommand = new Command(async () => await Logout());
}
public async Task GoToHome()
{
// Attempt 1:
// Navigation.PushAsync(new NavigationPage(new HomePage()));
// Attempt 2:
// Application.Current.MainPage = new NavigationPage(new HomePage());
}
尝试了第一次尝试,我们在 Android 上出现错误 - System.InvalidOperationException: PushAsync 在 Android 上不受全球支持,请使用 NavigationPage。
尝试了第二次尝试并正常工作,但单击主页或其他页面后没有导航。
有任何想法吗?
解决方案
没关系。我们解决了这个问题:
public async Task GoToHome()
{
((MasterDetailPage)Application.Current.MainPage).Detail = new NavigationPage(new HomePage());
((MasterDetailPage)Application.Current.MainPage).IsPresented = false;
}
推荐阅读
- python - 使用密码读取 zipe 文件中的多个 csv
- c# - 如何为 EF6 Database-First 中的所有实体类提供未映射的通用抽象 BaseEntity 父级?
- go - 如何在不将所有内容读入内存的情况下上传 gzip 文件
- ansible - 如何在ansible中更快地制作zip存档?
- ios - 如何在我们的应用程序中检查已植根的 iOS/iPadOS,例如最近的 checkra1n 漏洞利用?
- c# - 平板电脑处于人像模式时是否可以使用 UWP 和 MediaCapture 拍摄水平照片?
- python - 计算列表数组中特定元素的总出现次数
- c# - 将列添加到 CSV 并将列合并到此新列
- php - Ajax SyntaxError:JSON 输入意外结束
- java - 在 CDI 中生成可选 Bean