Xamarin.Forms 使用 ReactiveUI 检测空 ListView 以显示标签

Xamarin.Forms detect empty ListView with ReactiveUI to show Label

我想在 ListView 为空时显示标签。我尝试了几件事,例如:

this.WhenAnyValue(x => x.Items, (a) => a.Any())
    .ToProperty(this, x => x.IsVisible, out _isVisible)

其中"Items"是Reactive列表项:ReactiveList Items "IsVisible" 绑定 属性 到标签 IsVisible="{Binding IsVisible}" 属性。

问题是,当 "Items" 从空变为非空或反转时,它没有更新。

如果您只是在列表中添加或删除项目,那么观看您的 Items 属性 不会导致 WhenAnyValue 触发。它会在 Items 属性 本身改变时触发。

听起来您正在寻找的是当列表中项目的实际数量发生变化时的通知。类似于:

Items.CountChanged
    .Select(count => count == 0)
    .DistinctUntilChanged()
    .ToProperty(this, x => x.IsVisible, out _isVisible);

编辑 这假设您的 IsVisible 属性 设置如下:

private ObservableAsPropertyHelper<bool> _isVisible;
public bool IsVisible => _isVisible.Value;