Xamarin表单上的ActivityIndi​​cator

时间:2019-03-02 08:09:47

标签: c# .net xaml xamarin.forms

如何在Xamarin Forms OnStart()函数上放置一个ActivityIndi​​cator。 我正在检查OnStart()函数的网络访问权限。

3 个答案:

答案 0 :(得分:1)

将ActivityIndi​​cator绑定到BaseViewModel(IsBusy)中的一个属性。

查看

<ActivityIndicator Color="Accent" IsVisible="{Binding IsBusy}" IsRunning="{Binding IsBusy}" />

BaseViewModel(由所有ViewModel继承)

private bool _isBusy;

        public bool IsBusy
        {
            get { return _isBusy; }
            set
            {
                _isBusy = value;
                OnPropertyChanged("IsBusy");
            }
        }

为自己准备一个好的MVVM框架(Prism),并将网络检查置于起始页的OnNavigatedTo方法中。

 public override void OnNavigatedTo(INavigationParameters parameters)
 {
      IsBusy = true;
      await CheckNetwork();
      IsBusy = false;
 }

现在,您可以将相同的ActivityIndi​​cator代码片段粘贴到绑定到继承BaseViewModel的ViewModel的任何页面(XAML)中,并且仅在设置IsBusy时才起作用。

答案 1 :(得分:0)

还没有使用ActivityIndi​​cator,但是这个nuget很好用:Acr.UserDialogs

在MainActivity或ios等效项中安装并添加初始化部分后,只需在代码隐藏文件或视图模型(mvvm)中的资源密集型线程之间添加以下代码:

这适用于代码隐藏文件:

protected override async void OnAppearing(object sender, EventArgs e)
            {
                base.ViewIsAppearing(sender, e);

                UserDialogs.Instance.ShowLoading();
                //do stuff here
                UserDialogs.Instance.HideLoading();
            }

这适用于FreshMVVM框架:

protected override async void ViewIsAppearing(object sender, EventArgs e)
            {
                base.ViewIsAppearing(sender, e);

                UserDialogs.Instance.ShowLoading();
                //do stuff here
                UserDialogs.Instance.HideLoading();
            }

答案 2 :(得分:0)

我也在项目中使用网络检查,请检查以下内容:

using Plugin.Connectivity;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace PetBellies.View
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class NoConnection : ContentPage
    {
        private bool wasNotConn = false;

        public NoConnection()
        {
            InitializeComponent();

            CrossConnectivity.Current.ConnectivityChanged += async (sender, args) =>
            {
                if (CrossConnectivity.Current.IsConnected && !wasNotConn)
                {
                    wasNotConn = true;

                    await Navigation.PushModalAsync(new NavigationPage(new MainPage()));
                }
                else
                {
                    wasNotConn = false;
                }
            };
        }

        public NoConnection(bool isFromLogin)
        {
            CrossConnectivity.Current.ConnectivityChanged += async (sender, args) =>
            {
                if (CrossConnectivity.Current.IsConnected && !wasNotConn)
                {
                    wasNotConn = true;

                    var page = new LoginPage();

                    var navPage = new NavigationPage(page);

                    NavigationPage.SetHasNavigationBar(navPage, false);

                    await Navigation.PushModalAsync(navPage);
                }
                else
                {
                    wasNotConn = false;
                }
            };
        }
    }
}

https://github.com/officialdoniald/PetBellies/blob/master/PetBellies/PetBellies/View/NoConnection.xaml.cs

如果连接断开,则应用程序将导航到此页面,并在连接不可用时停留在该页面上。