xamarin - 在 Xamarin 表单中打开页面后从 Internet 获取数据
问题描述
我的代码存在一些性能问题。我正在使用 Xamarin 表单项目中的基本 MVVM,当有人导航到另一个页面时,我想从 Internet 获取数据。以下是我所做的;
这就是我通过命令导航到另一个页面的方式;(老实说,我真的不知道这种导航方法是否有一些性能损失)
if (Application.Current.MainPage.Navigation.NavigationStack.Last().GetType() != typeof(SubcategoryPage))
{
await Application.Current.MainPage.Navigation.PushAsync(new SubcategoryPage());
}
在这里,我传递特定类别的 Id 以获取其对应的子类别
public SubcategoryPage(int id)
{
InitializeComponent();
this.BindingContext = new SubcategoryPageViewModel(id);
}
在SubcategoryPageViewModel的构造函数中,我使用 Id 来在线获取数据,如下所示;
public SubcategoryPageViewModel(int id)
{
SubcategoryLoader(id);
}
下面是通过我的DataService类从 Internet 获取数据的方法。下面的代码可以很好地从互联网上获取数据;
private async Task SubcategoryLoader(int id)
{
try
{
var subCategories = await SubcategoryDataService.GetSubcategories(id);
if (subCategories.code == 1) // StatusCode = Successful
{
SubCategories = subCategories.document;
}
else
{
await Application.Current.MainPage.DisplayAlert("Oops!","Something went wrong", "Ok");
}
}
catch (Exception ex)
{
await Application.Current.MainPage.DisplayAlert("Oops!", ex.Message, "Ok");
}
}
现在我的问题是SubcategoryPage在在线服务结束之前不会打开,这会导致严重滞后。所以我想要发生的是在互联网服务发生之前打开SubcategoryPage 。
请提供任何帮助。
解决方案
将其移至
OnAppearing
方法。添加一个简单的检查。
protected override void OnAppearing()
{
base.OnAppearing();
if(BindingContext == null)
{
BindingContext = new SubcategoryPageViewModel(id);
}
}
推荐阅读
- html - flexbox 的子元素行为不同
- powershell-2.0 - 在 PowerShell v2.0 中导入和测试正在运行的服务列表
- javascript - 计算内部的 Axios 连接
- spring - In-Memory 和 MySQL DB 的不同持久性行为
- c# - 当我的 Access DB 被超过 1 个用户使用时,ExecuteNonQuery() 非常慢
- java - 执行迁移的配置不正确
- php - WooCommerce $product->get_stock_quantity(); 打破购物车页面
- python - 如何从 group by 中获取第一列?蟒蛇熊猫
- batch-file - 如何检查批处理文件中是否存在目录?
- python - 列表内容的长度,里面有列表