Xamarin.Android Swipe для обновления в MVVMCross загрузчик бесконечно - PullRequest
0 голосов
/ 08 апреля 2019

Мой код

.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; });
        }

Я могуВ состоянии видеть загрузчик, загрузчик загружается бесконечно, но не может остановить Swipe для обновления загрузчика.

1 Ответ

0 голосов
/ 09 апреля 2019

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

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

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

Теперь в вашем представлении привязка фактически связывает два типа:

<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;
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...