ReactiveUI:如何将参数正确传递给 ReactiveCommand.CreateFromTask

ReactiveUI: How to pass a parameter to ReactiveCommand.CreateFromTask correctly

我想在执行绑定到控件的 ReactiveCommand 时将参数从我的视图传递到我的 ViewModel。参数类型应为 IJcUser

所以我这样定义命令:

public ReactiveCommand<IJcUser, Unit> UserTouchCommand;

UserTouchCommand = ReactiveCommand.CreateFromTask(user => RootViewModel.DisplayUserProfile(user));

DisplayUserProfile的签名看起来像

Task DisplayUserProfile(IJcUser user);

但是编译器会抱怨,因为 user 来自类型 CancelationToken 而不是预期的 IJcUser

我终于找到了解决方案,但不明白为什么第一种方法不起作用。

UserTouchCommand = ReactiveCommand.CreateFromTask<IJcUser>(RootViewModel.DisplayUserProfile);

I finally I found a solution but don't understand why the first approach did not work.

因为您使用了错误的 ReactiveCommand.CreateFromTask 方法重载。代表 user => RootViewModel.DisplayUserProfile(user) 可能是 Func<CancellationToken, Task>Func<IJcUser, Task>。编译器无法知道是哪一个,除非你告诉它:

Func<IJcUser, Task> x = user => DisplayUserProfile(user);
UserTouchCommand = ReactiveCommand.CreateFromTask(x);

或者您可以明确说明类型参数:

UserTouchCommand = ReactiveCommand.CreateFromTask<IJcUser>(DisplayUserProfile);