2017-01-25 9 views
2

ReactiveCommandが実行されているコントロールにバインドされているときに、そのビューのパラメータをViewModelに渡したいとします。ReactiveUI:パラメータをReactiveCommand.CreateFromTaskに正しく​​渡す方法

public ReactiveCommand<IJcUser, Unit> UserTouchCommand; 

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

DisplayUserProfileの署名が

Task DisplayUserProfile(IJcUser user);

のように見える。しかしuserがタイプからなので、コンパイラは文句:パラメータは、だから私はこのようなコマンドを定義するタイプIJcUser

である必要がありますCancelationToken期待通りではないIJcUser

私は結局解決策を見つけましたが、なぜ最初のアプローチがうまくいかなかったのか理解できません。

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

答えて

3

私は最終的に私は解決策を見つけましたが、最初のアプローチが機能しなかった理由を理解していません。

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); 
+0

は、コンパイラは、コマンドの宣言からこれを取得することはできませんでしょうか? – Thomas

+0

いいえ、あなたが言っていない限り、あなたのfuncがFunc またはFunc ではなく、Func であることをどのように知っていると思いますか?それはできません。 – mm8

+0

'ReactiveCommond.CreateFromTask'にパラメータを渡すのに非常に役立ちます。 ReactiveUIは非常に混乱しています(オーバーロードされた型、型控除、オプションのパラメータがたくさんあります)。 – Felix

関連する問題