【发布时间】:2019-07-24 04:29:33
【问题描述】:
如何在 Xamarin Forms OnStart() 函数上放置 ActivityIndicator。 我正在检查 OnStart() 函数的网络访问。
【问题讨论】:
标签: c# .net xaml xamarin.forms
如何在 Xamarin Forms OnStart() 函数上放置 ActivityIndicator。 我正在检查 OnStart() 函数的网络访问。
【问题讨论】:
标签: c# .net xaml xamarin.forms
将 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 sn-p 粘贴到绑定到继承 BaseViewModel 的 ViewModel 的任何页面 (XAML) 中,并且它只会在您设置 IsBusy 时工作。
【讨论】:
没有使用过 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();
}
【讨论】:
我也在我的项目中使用网络检查,请检查:
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;
}
};
}
}
}
如果连接丢失,应用程序导航到此页面并在连接不可用时停留在此页面上。
【讨论】: