如何在Xamarin Forms OnStart()函数上放置一个ActivityIndicator。 我正在检查OnStart()函数的网络访问权限。
答案 0 :(得分:1)
将ActivityIndicator绑定到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;
}
现在,您可以将相同的ActivityIndicator代码片段粘贴到绑定到继承BaseViewModel的ViewModel的任何页面(XAML)中,并且仅在设置IsBusy时才起作用。
答案 1 :(得分:0)
还没有使用ActivityIndicator,但是这个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;
}
};
}
}
}
如果连接断开,则应用程序将导航到此页面,并在连接不可用时停留在该页面上。