日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。MVVMちょっとした小ネタです。F#には非同期ワークフローという非同期処理を同期的に書けるという素敵な機能があります。MSDNの非同期ワークフローのページからコードを拝借しますが、以下のようなコードが書けます。ignorerunAll()非同期にURLのデータを読み取って出力するという処理です。非同期の処理をしてるのに同期的な処理のコードと同じように書けるのが特徴です。素敵!!ということで、これを使うとMVVM的にどんなおいしいことがあるのかというと・・・ViewModelからViewを操作するためのMessengerパターンで何か使えそうです。MVVMをサポートするライブラリの1つPrismではInteractionRequestのRaiseメソッドにコールバックを渡すことで、Viewの処理結果を受け取って続きの処理を行うことが出来ます。コールバックは、ネストが深くなればなるほど嫌な感じになるので、出来れば避けたいところです。因みに実際に画面を用意するのはめんどくさいのでコンソールアプリケーションで作ったコールバックバージョンのコードを以下に示します。View側ではRaisedイベントを購読して処理をしているので、ちょっとエミュレート。メッセージボックスを表示してOKが押されたらConfirmedにtrueを設定する。ignoreこのコードを実行するとダイアログが表示されOKを押すと「OKが押されました」Cancelを押すと「Cancelが押されました」と表示されます。コメントにもありますがRaiseメソッドを呼び出しているところでコールバックを指定しているので、ちょっと処理が読みにくくなっています。今回はコールバック内の処理は短いですが、ちょっと長くなったり、別メソッドに切り出したりすると、とたんに処理の流れを追うのが大変になります。Raiseメソッドの非同期ワークフロー対応ということで以下のようにInteractionRequestクラスを拡張して非同期ワークフロー対応にしてみました。)RaiseAsyncメソッドを定義して、FromContinuationsメソッドを使ってAsyncを返すようにしています。このようにしておくと、以下のように非同期ワークフロー内でRaiseメソッドが呼び出せます。Async.Startコールバックを排除できたので、まるで一連の流の処理のようにコードを書けるようになりました。素敵ですね!非同期ワークフロー対応版のコードの全体を以下に示します。View側ではRaisedイベントを購読して処理をしているので、ちょっとエミュレート。メッセージボックスを表示してOKが押されたらConfirmedにtrueを設定する。v2.9.0とv3.0.0-pre5をリリースしました。id:neueccさんがプルリクをくれました。Prismでログイン...先日書いたのをちょろっと修正しました。C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。Blogの内容は個人の見解であり、所属する企業を代表するものではありません。)はてなブログをはじめよう!okazukiさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。