我需要在我的应用程序中ActivityIndicator
的几乎所有页面上显示ViewModels
<ActivityIndicator IsVisible="{Binding IsBusy}"
IsRunning="{Binding IsBusy}"
Color="Black"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"/>
那么有什么简便方法来做到这一点,还是需要在所有页面上都具有以上代码?
答案 0 :(得分:0)
为ActivityIndicator创建 CustomView ,并在 BaseViewModel 中创建ActivityIndicator的绑定属性。现在,您可以将此自定义视图附加到每个页面中,并通过各自的 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();
}
}
}