如何在整个项目中整合活动指标

时间:2019-06-08 08:38:24

标签: xamarin mvvm xamarin.forms activity-indicator

我需要在我的应用程序中ActivityIndicator的几乎所有页面上显示ViewModels

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

那么有什么简便方法来做到这一点,还是需要在所有页面上都具有以上代码

3 个答案:

答案 0 :(得分:0)

为ActivityIndi​​cator创建 CustomView ,并在 BaseViewModel 中创建ActivityIndi​​cator的绑定属性。现在,您可以将此自定义视图附加到每个页面中,并通过各自的 ViewModel处理绑定属性,它是由 BaseViewModel 继承的。

答案 1 :(得分:0)

您可以具有扩展方法,可以在其中添加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();
    }
}

答案 2 :(得分:0)

您可以将下面的代码用于具有IsBusy属性的BaseViewModel,因此,每当使IsBusy = True时,它将为各自的视图模型显示加载指示器,并在您将IsBusy = false时将其隐藏,而无需添加任何xaml代码随处添加Acr.Dilogues nuget包,例如here

为此,我正在使用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();
            }
        }
    }