Как интегрировать индикатор активности в проект - PullRequest
0 голосов
/ 08 июня 2019

Мне нужно показать ActivityIndicator почти на всех страницах из ViewModels в моем приложении

<ActivityIndicator IsVisible="{Binding IsBusy}"
   IsRunning="{Binding IsBusy}"
   Color="Black"
   VerticalOptions="CenterAndExpand"
   HorizontalOptions="CenterAndExpand"/>

Так есть ли простой способ сделать это или вам нужно иметь над кодом на всех страницах?

Ответы [ 3 ]

0 голосов
/ 08 июня 2019

Вы можете иметь расширенный метод, в который вы можете добавить ActivityIndicator. Теперь на любой странице, которую вам нужно показать, просто вызовите этот метод в конструкторе этой страницы.

public static class ActivityIndicatorControl
{
    public static void AddActivityIndicatorControl(this ContentPage page)
    {
        var activityIndicator = new ActivityIndicator
        {
            HorizontalOptions = LayoutOptions.Center,
            VerticalOptions = LayoutOptions.Center,
        };

        activityIndicator.SetBinding(VisualElement.IsVisibleProperty, "IsBusy");
        activityIndicator.SetBinding(ActivityIndicator.IsRunningProperty, "IsBusy");

        var grid = new Grid();
        grid.Children.Add(page.Content);
        grid.Children.Add(activityIndicator);
        page.Content = grid;
    }
}

Бэкэнд страницы:

public partial class MySamplePage : ContentPage
{
    public MySamplePage()
    {
        InitializeComponent();
        this.AddActivityIndicatorControl();
    }
}
0 голосов
/ 11 июня 2019

Вы можете использовать приведенный ниже код для вашей BaseViewModel со свойством IsBusy, поэтому всякий раз, когда вы делаете IsBusy = True, он будет отображать индикатор загрузки и скрывать его, когда вы делаете IsBusy = false для соответствующей модели представления, нет необходимости добавлять какой-либо код xamlв любом месте Просто добавьте пакет Nuget Acr.Dilogues, например здесь .

. Для этого я использую Acr.UserDilogues, пример кода следующий:

    private bool _isBusy;
    public bool IsBusy
    {
        get
        {
            return _isBusy;
        }
        set
        {
            SetValue(ref _isBusy, value);
            //TODO Comment below code for Custom Loading Indicator
            if (_isBusy)
            {
                UserDialogs.Instance.ShowLoading();
            }
            else
            {
                UserDialogs.Instance.HideLoading();
            }
        }
    }
0 голосов
/ 08 июня 2019

Создать CustomView для ActivityIndicator и создать свойства привязки ActivityIndicator в BaseViewModel . Теперь вы можете добавить этот настраиваемый вид на каждую страницу и обрабатывать свойства привязки с помощью соответствующих ViewModel который наследуется BaseViewModel .

...