【问题标题】:Xamarin.Forms detect empty ListView with ReactiveUI to show LabelXamarin.Forms 使用 ReactiveUI 检测空 ListView 以显示标签
【发布时间】:2023-03-08 08:40:01
【问题描述】:

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

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

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

问题是,当“项目”从空变为非空或反转时,它没有更新。

【问题讨论】:

    标签: xamarin.forms reactiveui


    【解决方案1】:

    如果您只是在列表中添加或删除项目,则查看您的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;
    

    【讨论】:

    • 谢谢。不能添加“out”关键字。对于 is visible 属性,我有以下代码。当我将项目添加到列表时,这不会改变.. bool _isVisible;公共布尔 IsVisible { 获取 => _isVisible;设置 => this.RaiseAndSetIfChanged(ref _isVisible, value); }
    • Items 属性如下所示: public ReactiveList Items { get => _items; set => this.RaiseAndSetIfChanged(ref _items, value); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2018-04-29
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多