を効果的に起こっていることである:ビューモデルのビューモデルを取得しIServiceAgentでデータを送信しようとしているIServiceAgent
2)にインスタンスが与えられ
1)。 viewmodelはデータの取得方法を知らないが、サービスエージェントに取得するよう指示する。
3)IServiceAgentは、ViewModelまたはその割り当て方法を認識するためのものではありません。
これはあなたの質問が始まるところです。デリゲートは何をしていますか、なぜそれが(s、e)必要なのですか?
The (s,e) => {} is effectively a way of saying this:
void anonymousMethod(Object s, EventArgs e){};
なぜこれが行われますか?
答えは、IServiceAgentでviewModelを更新し、ViewModelへの参照を持たないようにするためです。どのようにそれを行うことができます。それは戻り型の通常のメソッドを使って行うことができます。しかし、この場合、使用したサンプル記事では、その値を非同期的に返す必要があります。これはtradtionalメソッドで行うことができますが、あなたのviewmodelをブロックします。効果的にあなたが実装しているものは、同じようなイベントです。デリゲートはイベントの契約です。だから、誰でもイベントには、例えば、デリゲートが提供する契約に準拠するようにしている実装しています
textbox.Click += (s,e) => {((TextBox)s).Text = "Ive been clicked!"};
-OR-
textbox.Click += new ClickHandler(myClickHandler);
void myClickHandler(Object sender, EventArgs args){}
-OR-
textbox.Click += myClickHandler;
void myClickHandler(Object sender, EventArgs args){}
ものすべてがに準拠しますクリックイベント(イベントデリゲートによって定義される)によって指定されたコントラクト
あなたはテキストボックスクラスで定義されたものにすることを比較した場合、それはのようなものになりますので、あなたは、2つの入力を持つメソッドを供給する必要があるテキストボックスのクリックイベントを実装することを意味
をオブジェクト送信者のEventArgs aとvoid戻り値の型があります。このメソッドには任意の名前を付けることができます。
あなたの質問に使用されているラムダは、delgatesです。デリゲートはメソッド契約の確立に使用されます。あなたのラムダは契約に従うので、有効です。どのような(S、E)意味は、あなたがそれによって遵守されている契約のデリゲートまでのは、次のとおりです。
私のようなものが生成されます信じて
EventHandler<GetPeopleCompletedEventArgs> callback
:これは少しクレイジーに見えるかもしれません
(Object Sender, GetPeopleCompletedEventArgs args) <-------> (s,e)
をどうしてそんなに難しいのか理解できないのですが、intellisenseは(私がresharperと一緒に働く)は、sの種類を示します。 (s、e)の構文は非常に一般的で、最初のものは.netイベント(Object、EventArgs)とほとんど同じです
これは意味がありますか? '(オブジェクトs、GetPeopleEventArgs e)=> this.People = e.Result' – ChaosPandion
私はそれが少し明確になると思います。したがって、 "proxy.GetPeopleCompleted + = callback;"プロキシが値の返却を完了したときに、PeopleオブジェクトをResultに割り当てます。私は "+ ="構文にも慣れていません。 – Trevor