首页 > 解决方案 > 在 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 。

请提供任何帮助。

标签: xamarinxamarin.formsmvvmxamarin.androidxamarin.ios

解决方案


  • 将其移至OnAppearing方法。

  • 添加一个简单的检查。

protected override void OnAppearing()
{
    base.OnAppearing();

    if(BindingContext == null)
    {
         BindingContext = new SubcategoryPageViewModel(id);
    }            
}

推荐阅读