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

Tho*_*mas 5 reactiveui

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

所以我这样定义命令:

public ReactiveCommand<IJcUser, Unit> UserTouchCommand;

UserTouchCommand = ReactiveCommand.CreateFromTask(user => RootViewModel.DisplayUserProfile(user));
Run Code Online (Sandbox Code Playgroud)

的签名DisplayUserProfile看起来像

Task DisplayUserProfile(IJcUser user);

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

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

UserTouchCommand = ReactiveCommand.CreateFromTask<IJcUser>(RootViewModel.DisplayUserProfile);
Run Code Online (Sandbox Code Playgroud)

mm8*_*mm8 6

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

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

Func<IJcUser, Task> x = user => DisplayUserProfile(user);
UserTouchCommand = ReactiveCommand.CreateFromTask(x);
Run Code Online (Sandbox Code Playgroud)

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

UserTouchCommand = ReactiveCommand.CreateFromTask<IJcUser>(DisplayUserProfile);
Run Code Online (Sandbox Code Playgroud)

  • 将参数传递给“ReactiveCommond.CreateFromTask”对我很有帮助。ReactiveUI 使这里非常混乱(大量重载类型、类型推导和可选参数),并且总是让我感到绝望。 (2认同)