在 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);
}
}
我的代码有一些性能问题。我在 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);
}
}