TargetNullValue 在 Xamarin 应用程序的 ListView 中不起作用

TargetNullValue not working in ListView in Xamarin app

如果我的 ListView 没有数据显示在我的 Xamarin Forms 5 应用程序中,但我无法让它工作,我正在尝试显示一些文本或图像。

这是我的 ListView 的样子:

<ListView
   x:Name="CustomersList"
   ItemsSource="{Binding Customers, TargetNullValue='No customers!'}"
   BackgroundColor="Transparent">
      <ListView.ItemTemplate>
          <DataTemplate>
              <TextCell
                 Text="{Binding FullName}"
                 TextColor="{StaticResource PrimaryDark}"
                 Command="{Binding Source={x:Reference Name=CustomersList}, Path=BindingContext.CustomerSelectedCommand}"
                 CommandParameter="{Binding .}"/>
          </DataTemplate>
      </ListView.ItemTemplate>
</ListView>

ListView 的源在我的 ViewModel

中设置如下
ObservableRangeCollection<CustomerModel> customers;
public ObservableRangeCollection<CustomerModel> Customers
{
   get => customers;
   set
   {
      if (customers == value)
         return;

      customers = value;
      OnPropertyChanged();
   }
}

如果我的 API 没有调用 returns,我会调用 Customers = null;

当我如上所示使用 TargetNullValue 时,在将 TextCell 绑定到 FullName 时,我确实遇到了错误。它显示:

'FullName' property not found on 'N', target property: 'Xamarin.Forms.TextCell.Text'

然后它为 No Customers! 中的每个字符重复此错误消息。

然后我尝试使用 FallbackValue。这次我没有收到错误,但它根本没有显示“No Customers!”。留言。

如何处理 ListView 没有数据可显示?至少,我想显示一些简单的文本消息,但显示更好的东西会更好,也许是图片。

如果您可以从 ListView 切换到 CollectionView,您可以使用 built-in CollectionView.EmptyView:

<CollectionView ItemsSource="{Binding Customers}"
                EmptyView="No customers!" ... />

使用相同的 EmptyView 你可以定义任何视图:

<CollectionView>
    <CollectionView.EmptyView>
        <ContentView>
           <image ... /> 
        </ContentView>
    </CollectionView.EmptyView>
</CollectionView>

文档:CollectionView EmptyView