1

私は MVVM Light を使用して MVVM アプリケーションに取り組んでいますが、全体として、とても使いやすいと感じています。しかし、私はしつこい問題を抱えており、誰かが助けてくれることを願っています.

DialogMessageVM から View にインスタンスを送信してダイアログを表示しています。結果はコールバックを介して VM に送り返されます。これまでのところ問題ありません。

ただし、ダイアログの結果 (OK、はい、いいえ、キャンセルなど) は のメンバーとして返されenum System.Windows.MessageBoxResultます。これは、View/ViewModel の分離に反しているように見えます。これは明らかに UI の型であるため、VM はこれまたは名前空間MessageBoxResultの何かに依存するべきではありません。System.Windows

私が探しているのはDialogMessage、代わりのコールバックを使用することです。たとえば、は に依存せずにユーザーの選択を表すために私が定義した型Action<UserResult>;です。Action<System.Windows.MessageBoxResult>;UserResultMessageBoxResult

これは可能ですか、それとも UI の概念を VM から除外したいという私が厳しすぎるのでしょうか?

4

1 に答える 1

0

質問の 2 番目の部分に関しては、私が MVVM Light を使い始めたとき、私もMessageBoxResultVM でバックを受け取るのは UI 指向に少し似ていると感じました。
一方、あなたが提案した UserResult のように、名前だけが異なっていれば、それで十分でしょうか?
クラスのネーミングだけが問題なら、放っておいてもいいと思います。結果 Ok, Yes, No, Cancelは、MessageBox がボタンで表示されたかどうか、または他の種類の UI 実装 (コンボ ボックスを含むフォームとしましょう) であったかどうかを示すものではありません。

それでも気になる場合は、いつでもDialogMessageDialog を発生させる のラッパーを作成し、 を取得して、同じ値を持つ列挙型のMessageBoxResultを返すUserResultことができます (単純なコンバーターと考えてください)。
でも、おっしゃる通り、やり過ぎかもしれませんね…。

于 2012-11-19T10:05:58.203 に答える