根据是否选择了 Xamarin CollectionView 项来确定 ReactiveUI 中的 CanExecute
Determining CanExecute in ReactiveUI based upon whether a Xamarin CollectionView item is selected
我有一个项目的 Xamarin Forms CollectionView 设置为 SelectionMode="Single" 并将 SelectedItem 绑定到 ViewModel 属性。
ViewModel 属性 看起来像这样:
private TaskItem _selectedTask;
public TaskItem SelectedTask
{
get => _selectedTask;
set => this.RaiseAndSetIfChanged(ref _selectedTask, value);
}
我还有一个绑定到 ReactiveCommand 的按钮,我想添加一个 CanExecute 参数。
应用首次启动时,ViewModel 的 SelectedTask 属性 为空,因为 CollectionView 中没有任何项目被选中。所以我希望我的 CanExecute 仅在选择了一个项目时才为 return true。这意味着 SelectedTask 将不再为空。但我无法弄清楚如何测试整个对象是否为 null 而不是对象的 属性 。换句话说,我想做这样的事情:
IObservable<bool> DeleteTaskCanExecute()
{
return this.WhenAnyValue(x => x.SelectedTask,
selectedTask => selectedTask != null
);
}
但我不能,因为它会出现一个错误,即 WhenAnyValue 调用在两个签名之间不明确,因为它希望我根据 TaskItem 属性 而不是 SelectedTask 表示的 TaskItem 对象来创建表达式。
我认为 WhenAnyValue 因此不是合适的函数,但我一直无法找到我可以使用的函数。
如何制作一个 CanExecute 函数,它可以与 ReactiveUI 命令一起使用,并且只有在 CollectionView 中的某些内容被选中时才 return 为真?
IObservable<bool> DeleteTaskCanExecute()
{
return this
.WhenAnyValue(x => x.SelectedTask)
.Select(x => x != null);
}
我有一个项目的 Xamarin Forms CollectionView 设置为 SelectionMode="Single" 并将 SelectedItem 绑定到 ViewModel 属性。
ViewModel 属性 看起来像这样:
private TaskItem _selectedTask;
public TaskItem SelectedTask
{
get => _selectedTask;
set => this.RaiseAndSetIfChanged(ref _selectedTask, value);
}
我还有一个绑定到 ReactiveCommand 的按钮,我想添加一个 CanExecute 参数。
应用首次启动时,ViewModel 的 SelectedTask 属性 为空,因为 CollectionView 中没有任何项目被选中。所以我希望我的 CanExecute 仅在选择了一个项目时才为 return true。这意味着 SelectedTask 将不再为空。但我无法弄清楚如何测试整个对象是否为 null 而不是对象的 属性 。换句话说,我想做这样的事情:
IObservable<bool> DeleteTaskCanExecute()
{
return this.WhenAnyValue(x => x.SelectedTask,
selectedTask => selectedTask != null
);
}
但我不能,因为它会出现一个错误,即 WhenAnyValue 调用在两个签名之间不明确,因为它希望我根据 TaskItem 属性 而不是 SelectedTask 表示的 TaskItem 对象来创建表达式。
我认为 WhenAnyValue 因此不是合适的函数,但我一直无法找到我可以使用的函数。
如何制作一个 CanExecute 函数,它可以与 ReactiveUI 命令一起使用,并且只有在 CollectionView 中的某些内容被选中时才 return 为真?
IObservable<bool> DeleteTaskCanExecute()
{
return this
.WhenAnyValue(x => x.SelectedTask)
.Select(x => x != null);
}