gpt4 book ai didi

c# - Xamarin - 发布后刷新 ListView

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:26 25 4
gpt4 key购买 nike

我正在开发一个 Xamarin Forms 应用,它有一个标签页。其中一个选项卡包含一个 ListView 控件,显示从 Rest API 使用的数据。如果我点击添加按钮,一个模式会显示我可以在哪里创建新项目并将帖子发送到 Rest API。成功后,我从导航中弹出模式,留下 ListView 显示。在我的 ListView 中,最后添加的项目没有显示。

如何在添加项目后调用 Rest API 刷新 ListView

这是我的 XAML 页面:BonosView.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns ="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:iconize="clr-namespace:FormsPlugin.Iconize;assembly=FormsPlugin.Iconize"
x:Class="rodriguez.BonosView" x:Name="BonosView"
Title="Bonos">

<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness" iOS="0, 20, 0, 0" />
</ContentPage.Padding>

<ContentPage.Content>
<StackLayout>
<Label x:Name="BonosListMessage" IsVisible="false" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" Text="No exixten bonos para mostrar"/>
<ListView x:Name="BonosList" ItemTapped="ViewDetails" RowHeight="70" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.Padding>
<OnPlatform x:TypeArguments="Thickness" iOS="10,5" Android="10,5"/>
</Grid.Padding>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Label x:Name="monto" Text="{Binding Monto}" Style="{DynamicResource TitleListBono}" Grid.Row="0" Grid.ColumnSpan="2" LineBreakMode="NoWrap" HorizontalOptions="StartAndExpand"/>
<Label x:Name="nombre" Text="{Binding nombreCompleto}" FontSize="Small" FontAttributes="Bold" Grid.Row="1" Grid.Column="0" HorizontalOptions="StartAndExpand"/>
<Label x:Name="estado" Text="{Binding Estado}" FontSize="Small" Grid.Row="1" Grid.Column="1" HorizontalOptions="End" TextColor="Green"/>
<Label x:Name="montoRD" Text="{Binding MontoRD}" FontSize="Small" Grid.Row="2" Grid.Column="0" HorizontalOptions="StartAndExpand"/>
<Label x:Name="fecha" Text="{Binding fechaCompra, StringFormat='{0:dd-MMM-yyyy}'}" FontSize="Small" Grid.Row="2" Grid.Column="1" HorizontalOptions="End"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

</StackLayout>
</ContentPage.Content>
</ContentPage>

这是我用来填充列表的方法:

async void refreshData()
{
this.IsBusy = true;
bonosLista = await manager.GetAll(); //obtaining bonos from Server

if (bonosLista != null)
{
if (bonosLista.Count() > 0)
{
BonosList.ItemsSource = bonosLista;
}
else
{
BonosList.IsVisible = false;
BonosListMessage.IsVisible = true;
}
}
else
{
await DisplayAlert("Error!", "Se ha producido un error en la conexión", "OK");
}

this.IsBusy = false;
}

我想在模式弹出后调用该方法。

最佳答案

使用 Appearing 事件是正确的,但您也不需要在方法上使用 async void 除非它是事件处理程序

更新 refreshData 方法以使用 async Task

async Task refreshData() {
this.IsBusy = true;
bonosLista = await manager.GetAll(); //obtaining bonos from Server

if (bonosLista != null) {
if (bonosLista.Count() > 0) {
BonosList.ItemsSource = bonosLista;
} else {
BonosList.IsVisible = false;
BonosListMessage.IsVisible = true;
}
} else {
await DisplayAlert("Error!", "Se ha producido un error en la conexión", "OK");
}
this.IsBusy = false;
}

事件处理程序是唯一可以使用 async void 的地方,所以更新到

this.Appearing += async (object sender, EventArgs e) => {
await refreshData();
};

关于c# - Xamarin - 发布后刷新 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45622904/

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