我在Xamarin.Forms应用程序中有一个页面,它显示从Web加载的数据。我希望在加载时显示ActivityIndicator
,并在加载数据时显示列表视图。我想在XAML中这样做。
我能以某种方式做这样的事情:
if(dataIsLoading)
<ActivityIndicator .../>
else
<ListView ...>...</ListView>
答案 0 :(得分:3)
我建议做这样的事情。
<强>视图模型强>
创建一个IsBusy属性。
private bool _isBusy = false;
public bool IsBusy
{
get { return _isBusy; }
set { _isBusy = value; OnPropertyChanged(nameof(IsBusy)); }
}
<强>转换器强>
创建一个NotConverter。这只是可以翻转布尔值并在XAML中引用的东西。
public class NotConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return null;
var boolean = false;
if (Boolean.TryParse(value.ToString(), out boolean))
return !boolean;
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
查看强>
在XAML顶部引用转换器。
xmlns:converter="clr-namespace:MobileApp.Converter"
在Pages资源字典中声明您的资源。
<ContentPage.Resources>
<ResourceDictionary>
<converter:NotConverter x:Key="NotConverter"/>
</ResourceDictionary>
</ContentPage.Resources>
然后在XAML中使用此属性。
<Grid>
<ListView IsVisible="{Binding IsBusy, Converter={StaticResource NotConverter}}" />
<ActivityIndicator IsRunning="{Binding IsBusy}" IsVisible="{Binding IsBusy}" />
</Grid>