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;
我想在 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;