Xamarin.Android Проведите пальцем по экрану, чтобы обновить в MVVMCross загрузчик загружается бесконечно

Мой код

Файл .AXML

<MvvmCross.Droid.Support.V4.MvxSwipeRefreshLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    local:MvxBind="Refreshing IsBusy;RefreshCommand RefreshCommand">

моя модель просмотра

       private MvxCommand refreshCommand;
       public ICommand RefreshCommand
        {
            get
            {
                return refreshCommand ?? (refreshCommand = new MvxCommand(ExecuteRefreshCommand));
            }
        }

        private bool m_IsBusy;

        public new bool IsBusy
        {
            get { return m_IsBusy; }
            set
            {
                m_IsBusy = value; RaisePropertyChanged(() => IsBusy);
                BaseMessage = m_IsBusy ? "Refreshing..." : string.Empty;
            }
        }

        async private void ExecuteRefreshCommand()
        {
          await Task.Run(() => { m_IsBusy = false; });
        }

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


person msk_sureshkumar    schedule 08.04.2019    source источник


Ответы (1)


Просмотр кода из MvxSwipeRefreshLayout вы можете видеть, что он наследуется от SwipeRefreshLayout. SwipeRefreshLayout содержит логическое значение Refreshing. Это указывает на то, что он загружается, и, следовательно, должен отображаться значок загрузки. Установка этого значения в false скроет анимацию.

Сделать это можно, привязав к нему. Создайте дополнительное свойство, например isRefreshing в вашей модели просмотра, например:

private bool _isRefreshing;
public bool IsRefreshing
{
    get { return _isRefreshing; }
    set
    {
        _isRefreshing = value;
        RaisePropertyChanged(() => IsRefreshing);
    }
}

Теперь, на ваш взгляд, bind на самом деле связывает два, например:

<MvxSwipeRefreshLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    local:MvxBind="Refreshing IsRefreshing; RefreshCommand RefreshCommand">

Теперь вам нужно вручную установить логическое значение false, когда ваша «работа по обновлению» завершена. Например:

public IMvxCommand RefreshCommand
{
    get
    {
        return new MvxCommand(async () => {

            // This simulates some refresh work which takes 3 seconds
            await Task.Delay(3000);
            IsRefreshing = false;
        });
    }
}
person JKL    schedule 08.04.2019
comment
Я нашел недостающую часть Refreshing IsRefreshing, спасибо за ваш ответ - person msk_sureshkumar; 09.04.2019
comment
Спасибо, да, логическая привязка была выполнена и обновила мой запрос, @ JKL есть ли способ привязать BaseMessage = m_IsBusy? Обновление ...?, Я не могу найти способ привязать сообщение? - person msk_sureshkumar; 09.04.2019