Xamarin.Forms中ListView无数据提示

 jvxiang   2018-02-24 13:11   1,125 人阅读  0 条评论

介绍

在手机中,我们常常看到如果ListView或者其他列表式的控件没有内容时会显示一个无数据的提示,这对用户来说是很友好的。

但是Xamarin.Forms的ListView却没有提供类似的功能,我们这里可以借助Converter跟Gird来间接实现一个类似的功能。

由于ListView类似的控件都需要一个Source,而这个Source不管是List<T>还是ObservableCollection<T>都是实现了IList接口的,所以我们可以在Converter中使用IList接口来判断Source是否有内容,根据Source是否有内容来处理是否显示无数据的提示消息。

Converter

首先我们来看Converter,一个Converter需要实现IValueConverter接口,它定义了两个方法Convert与ConvertBack分别代表从源数据转换到目标数据以及从目标数据转换回源数据。

由于我们只是希望在无数据时显示一个View,所以我们可以只处理Convert方法。我们来看一下Converter方法的原型:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

在这里我们只需要关注输入的object value,这个是要转换的源数据。以及返回值object,这个是目标数据。

在这里,我们的源数据是一个IList,返回的目标数据应该是是一个控制View是否显示的bool值,是否显示的依据应该是IList中的数据个数是否为0。所以我们编写如下代码:

 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is IList collection && collection.Count > 0) { return false; } return true; }

判断如果源数据是一个IList,并且源数据的Count大于0,我们则认为该ListView有内容,提示View的IsVisible=false,否则IsVisible=true。

完整Converter代码如下:

public class NoRecordConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is IList collection && collection.Count > 0) { return false; } return true; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }

应用

我们写完了Converter该怎么绑定给需要的ListView呢?

首先,我们要在页面的Resources下定义我们的Converter。

 <ContentPage.Resources> <ResourceDictionary> <converter:NoRecordConverter x:Key="NoRecordConverter"></converter:NoRecordConverter> </ResourceDictionary> </ContentPage.Resources>

这里的converter标签不是系统自带的,而是我们自定义的一个标签,需要定义在Page页面上。
xmlns:converter="clr-namespace:Converter所在的命名空间;assembly=Converter所在的程序名"

然后我们将提示信息与ListView放在Grid的同一行同一列里
<Grid> <ListView ItemsSource="{Binding List}"> </ListView> <Label Text="暂无数据" IsVisible="{Binding List, Converter={StaticResource NoRecordConverter}}"></Label></Grid>

这里我们的提示信息使用一个Label,当然你可以让Label上下左右居中,或者使用各种Layout制作一个更加复杂的提示信息。我们这里就不多加演示了。

将ListView的ItemSource与Label的IsVisible绑定同一个数据源,当数据源有内容时,提示信息隐藏,数据源没有内容时,提示信息显示。做到了良好的提示。

本文地址:https://www.jvxiang.com/xamarin-forms中listview无数据提示.html
版权声明:本文为原创文章,版权归 jvxiang 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情