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);
我想在执行绑定到控件的 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);