gpt4 book ai didi

Xamarin Forms 在创建时异步填充数据

转载 作者:行者123 更新时间:2023-12-04 06:16:50 24 4
gpt4 key购买 nike

我有一个绑定(bind)到 ViewModel 的 Xamarin 表单。创建此 ViewModel 时,我希望它异步从数据库中获取数据。我的问题是我不确定如何调用异步方法,因为构造函数不能调用异步方法,而 getter 不能调用异步方法。

我在 UI 中使用纯 XAML,XAML 是否可以在初始化时调用方法?

我的 View 模型:

public class DonorViewModel : BaseViewModel
{
public DonorViewModel (IRepository<Donor> donorRepository)
{
_donorRepository = donorRepository;
}

private string _name;

public string Name {
get {
return _name;
}
set {
if (_name != value) {
_name = value;
OnPropertyChanged ("Name");
}
}
}

private IRepository<Donor> _donorRepository;

private async Task GetName()
{
var donor = await _donorRepository.Get(d => d.Id == 1);
Name = donor.Name;
}
}

我的 XAML:

<?xml version="1.0" encoding="UTF-8"?>
<d:ViewPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="DonationExample.DonorView"
xmlns:d="clr-namespace:DonationExample;assembly=DonationExample"
x:TypeArguments="local:DonorViewModel"
xmlns:local="clr-namespace:DonationExample">
<ContentPage.BindingContext>

</ContentPage.BindingContext>

<StackLayout Spacing="10"
VerticalOptions="End"
Orientation="Horizontal"
HorizontalOptions="Start">
<Label x:Name="lblName" Font="20" Text="{Binding Name}" />

</StackLayout>

</d:ViewPage>

XAML 代码隐藏:

public partial class DonorView : ViewPage<DonorViewModel>
{
public DonorView ()
{
InitializeComponent ();
}
}

我想也许我可以在后面的 XAML 代码中调用它,但这又是在构造函数中。

有什么建议么?

谢谢

最佳答案

OnAppearing 是一种可能的方法,因为您可以合法地使用

public async void OnAppearing()
{

}

但是,它会导致许多问题,例如当您从前面的页面返回时,它会再次运行。

根据您使用的导航服务或样式,我创建了一个新事件,该事件仅在您第一次访问该页面时才被调用。

在我的 BaseViewModel.cs 中的 OnNavigated 事件
https://github.com/adamped/xarch-starter/blob/master/Mobile/Base/BaseViewModel.cs

当您将页面推送到堆栈时会调用它。基本上在将页面推送到 NavigationPage 时调用此方法。

或者,如果您想要一种快速的方法,请使用 OnAppearing 方法,但在其中放置一个标志/ bool 值,这样您就可以知道它何时已经运行过一次,然后不会再次运行。

关于Xamarin Forms 在创建时异步填充数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34911741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com