在 Xamarin 表单中打开页面后从 Internet 获取数据

Fetching data from the internet after a page opens in Xamarin forms

我的代码有一些性能问题。我在 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 class 从互联网上获取数据的方法。下面的代码可以很好地从互联网上获取数据;

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);
    }            
}