как работать с индикатором активности, пока в списке нет загруженной формы xamarin - PullRequest
0 голосов
/ 11 мая 2018

Я связываю listview с веб-службы, теперь некоторое время listview занимает время для загрузки, зависит от подключения к интернету, мне нужно activity indicator продолжать работать, пока не загрузится listview. вот мой код

1007 * 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 не загрузится?

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

В вашем xaml вы должны привязать свойство IsRunning вашего ActivityIndicator к вашему списку просмотра

<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="{Binding Source={x:Reference ReportListView}, Path=IsLoading}" 
 x:Name="activity"/>

Затем в вашем коде, при инициализации, установите IsVisible, IsEnabled и IsRunning в true

For example

public ListViewPage()
    {
        InitializeComponent();
        activity.IsVisible = true;
        activity.IsRunning = true;
        activity.IsEnabled = true;
    }

Затем вы можете обработать скрытие вашего ActivityIndicator, как показано ниже

protected override void OnAppearing()
    {
        ReportListView.ItemsSource = //your items;
        reportIndicator.IsVisible = false;
        reportIndicator.IsRunning = false;
        reportIndicator.IsEnabled = false;

        base.OnAppearing();            
    }
0 голосов
/ 11 мая 2018

Обычный подход заключается в привязке свойства 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, приложение будет отображать индикатор загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...