微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据是否选择了 Xamarin CollectionView 项来确定 ReactiveUI 中的 CanExecute

如何解决根据是否选择了 Xamarin CollectionView 项来确定 ReactiveUI 中的 CanExecute

我有一个设置为 SelectionMode="Single" 并将 SelectedItem 绑定到 viewmodel 属性的项目的 Xamarin Forms CollectionView。

viewmodel 属性如下所示:

private TaskItem _selectedTask;

    public TaskItem SelectedTask
    {
        get => _selectedTask;
        set => this.RaiseAndSetIfChanged(ref _selectedTask,value);
    }

我还有一个绑定到 ReactiveCommand 的按钮,我想添加一个 CanExecute 参数。

当应用程序第一次启动时,viewmodel 的 SelectedTask 属性为 null,因为 CollectionView 中没有任何项目被选中。所以我希望我的 CanExecute 只有在选择了一个项目时才返回 true。这意味着 SelectedTask 将不再为空。但是我不知道如何测试整个对象是否为空而不是对象的属性。换句话说,我想做这样的事情:

IObservable<bool> DeleteTaskCanExecute()
{            
    return this.WhenAnyValue(x => x.SelectedTask,selectedTask => selectedTask != null                    
      );
}

但我不能,因为它然后有一个错误,即 WhenAnyValue 调用在两个签名之间不明确,因为它希望我根据 TaskItem 属性而不是 SelectedTask 代表的 TaskItem 对象创建表达式。

因此,我认为 WhenAnyValue 不是合适的函数,但我一直无法找到我要使用的函数

如何制作一个可以与 ReactiveUI 命令一起使用并且仅在 CollectionView 中的某些内容被选中时才返回 true 的 CanExecute 函数

解决方法

IObservable<bool> DeleteTaskCanExecute()
{            
    return this
        .WhenAnyValue(x => x.SelectedTask)
        .Select(x => x != null);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。