【问题标题】:ActivityIndicator on Xamarin FormsXamarin 表单上的 ActivityIndi​​cator
【发布时间】:2019-07-24 04:29:33
【问题描述】:

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

【问题讨论】:

    标签: c# .net xaml xamarin.forms


    【解决方案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 sn-p 粘贴到绑定到继承 BaseViewModel 的 ViewModel 的任何页面 (XAML) 中,并且它只会在您设置 IsBusy 时工作。

    【讨论】:

      【解决方案2】:

      没有使用过 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();
                  }
      

      【讨论】:

        【解决方案3】:

        我也在我的项目中使用网络检查,请检查:

        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

        如果连接丢失,应用程序导航到此页面并在连接不可用时停留在此页面上。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-20
          • 2017-08-28
          • 1970-01-01
          • 1970-01-01
          • 2019-06-25
          • 1970-01-01
          相关资源
          最近更新 更多