私はlistview
Webサービスからバインドしlistview
ていますが、インターネット接続によってはロードに時間がかかるようになりました。ロードさactivity indicator
れるまで実行を続ける必要listview
があります。これが私のコードです
xaml
<ListView x:Name="ReportListView" ItemsSource="{Binding ReportList}"
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="9" HorizontalOptions="StartAndExpand" Orientation="Vertical" BackgroundColor="Lavender">
<Label Text="{Binding ReportName}" FontSize="Medium" WidthRequest="10000" TextColor="Blue" Style="{DynamicResource ListItemTextStyle}" />
</StackLayout
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ActivityIndicator HorizontalOptions="Center" VerticalOptions="Center" IsRunning="False" IsVisible="False" x:Name="activity"/>
私は絶対に正しくないこのように働いています
.cs
activity.IsVisible = true;
activity.IsRunning = true;
wait.IsVisible = true;
progressControl.IsVisible = true;
ReportListView.IsVisible = false;
Task.Delay(5000);
BindingContext = new MainViewModel();
activity.IsVisible = false;
activity.IsRunning = false;
wait.IsVisible = false;
progressControl.IsVisible = false;
ReportListView.IsVisible = true;
このコードactivity indicator
で5秒間実行すると消え、listview
負荷はネットワーク接続に依存します。アクティビティインジケーターがlistview
ロードされるまで実行され続ける場合、どうすれば作業できますか?
一般的なアプローチは、のIsVisible
プロパティをビューモデルのActivityIndicator
一部IsBusy
またはIsLoading
プロパティにバインドすることです。
XAML:
<ListView x:Name="ReportListView" ItemsSource="{Binding ReportList}">
...
</ListView>
<ActivityIndicator IsRunning="{Binding IsBusy}" IsVisible="{Binding IsBusy}" />
ViewModel:
bool isBusy;
public bool IsBusy
{
get => isBusy;
set
{
isBusy = value;
OnPropertyChanged();
}
}
async Task LoadItemsAsync()
{
try
{
IsBusy = true;
// Call your web service here
var items = await service.LoadSomthingAsync();
}
catch (Exception ex)
{
// Handle exception
}
finally
{
IsBusy = false;
}
}
この場合、に設定IsBusy
するたびtrue
に、アプリに読み込みインジケーターが表示されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加