在Xamarin.Forms中使用切换视图(使用XAML)

时间:2016-10-21 16:36:04

标签: xamarin.forms

我在Xamarin.Forms应用程序中有一个页面,它显示从Web加载的数据。我希望在加载时显示ActivityIndicator,并在加载数据时显示列表视图。我想在XAML中这样做。

我能以某种方式做这样的事情:

if(dataIsLoading)
  <ActivityIndicator .../>
else
  <ListView ...>...</ListView>

1 个答案:

答案 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>