Спиннер Xamarin ListView уходит слишком рано для асинхронной команды - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть представление списка Xamarin.Forms, которое я хочу обновить при извлечении:

<ListView x:Name="listView"
      ItemsSource="{Binding Announcements}"
      HasUnevenRows="true"
      IsPullToRefreshEnabled="true"
      IsRefreshing="{Binding IsRefreshing}">

Код сзади:

private bool isRefreshing = false;
public bool IsRefreshing
{
    get { return isRefreshing; }
    set
    {
        isRefreshing = value;
        OnPropertyChanged(nameof(IsRefreshing));
    }
}

private void SetListViewToRefreshOnPull()
{
    listView.RefreshCommand = new Command(async () =>
    {
        IsRefreshing = true;
        await RefreshData; // After awaiting here, the spinner changes appearance.
        IsRefreshing = false;
    });
}

private Task RefreshData => Task.Delay(5000);

Конечно, я заставил команду обновления ждать5 секунд, чтобы смоделировать медленный ответ API.

При перетягивании списка вниз отображается счетчик, как и ожидалось:

enter image description here

Однако, каккак только задача RefreshData начинает ждать 5 секунд, вертушка переходит в странное «деформированное» состояние, которое не вращается:

enter image description here

полный счетчик показывается только за долю секунды до деформированного, поэтому такое поведение не является идеальным. Есть ли какой-нибудь способ заставить полноценный спиннер оставаться в течение всего времени асинхронного обновления?

1 Ответ

0 голосов
/ 30 сентября 2019

Попробуйте IsRefreshing = false, который должен скрывать индикатор загрузки.

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