ピースペース

削除コマンドを実装しようとして「なんじゃこりゃ!!複雑(T.T)」に遭遇した

leave a comment »

削除続行の確認ダイアログを表示して、
Yesなら、削除サービスに削除を依頼して、
応答がSuccessならリストからRemoveする。
たったそれだけのことに随分手間取った(T.T)

まず、ViewModelからMessageBoxはどうやって表示するの?がわからない。
いろんな方法があるようだが、「たったそれだけ」のことにどうも複雑するぎる感がぬぐえない。
に比べて、このDialogServiceを利用する。というのは単純でわかりやすい気がする。
https://marcominerva.wordpress.com/2014/10/14/dialogservice-in-mvvm-light-v5/

プラットフォーム側で実装して、VMはインタフェースでそれを利用する。
基本発想はNavigationServiceと同じ。これでいいんだよね??

ところが、そのMVVMLightに定義されているIDialogServiceにはまった;
ShowMessageがTask<bool>型で定義されているのだが、この実装方法がわからない。
それは非同期処理を整理して理解できてないのが理由だが、 オラ的には
ここは単純にbool型でMessageDialog.Showの結果だけをもらう。のが良かったような気がする
どうなんだろう??

きっと何か意味があるんでしょう。とにかくそのまま実装してみることにする。
が、まず、MessageDialog.Showで、
「呼び出しスレッドは、多数のUI コンポーネントが必要としているため、STAである必要があります」と叱られた。
なんとかクリアして、次はItems.Remove(item)で、
「この型のCollectionView は、Dispatcherスレッドとは異なるスレッドからそのSourceCollectionへの変更をサポートしません」と叱られた。
いずれもUIの変更を伴うのでメインスレッドで実行する必要があるということらしい。
んだば何を非同期にすれば良いの?? サーバー側サービスコールは既に非同期になってますけど・・・
まで辿りついて、説明してくれ→MVVMLight.IDialogService←の実装例を探しても見つからない;

そもそもの問題はMessageBoxを表示する。が、いつのまにか非同期で混乱するはめになった。
でもまあおかげで、改めて理解できていない→非同期。が、はっきりして良かった。
こんな風にもたもたしながら進んでいくしかないのだ→進歩←に効率を求めらられない。
をどう消化するか?が成長するということだと思う。

Written by nasu38yen

2015年5月14日 @ 11:06 PM

カテゴリー: .NET, プログラム

Tagged with

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。