2016-03-21 7 views
0

私はSilverlight/MVVMを学んでいます。今私はコマンドの問題に直面している、私は思っただけ複雑すぎると思う。私は、コマンドの後に子ウィンドウを閉じて実行したかったのです。
コンサートの分離によると、理解しているように、ビューから実行する必要があります。
私が解決策を探している限り、私はそれを見つけました、そして、そのような些細なことは自明ではありませんでした。コマンドなしのMVVM

これをまとめると、ビュー、ビューモデル、モデルの分離は素晴らしいアイデアだと言わざるを得ない。
また、ViewからViewModelへのバインディングはきれいで清潔です。 しかし、コマンドについてはどうでしょうか。私が理解しているように、それらは実行するコードの一部です(代理人のように)。しかし、あまりにも複雑で面倒です。

あなたの意見を知りたい。 VieModelがプロパティと通常のパブリックメソッドを持ち、ビューのイベントから実行されるという考えはどうでしょうか?ビューの関連要素をビューモデルに渡さないとMVVMになります。

もちろん、コマンドのCanUpdate機能を模倣するために、ViewModelのプロパティにIsEnabledを個別にバインドする必要があるという欠点があります。 ViewModelについて知らないビューではありません。 ビューはあまりテスト可能ではありませんか?

非常に柔軟性があります。たとえば、クリックイベントの場合、私はいくつかの厳密なビューロジックを行い、viewmodelオブジェクトからメソッドを呼び出してから、別のメソッドを呼び出して、後でさらにいくつかのビューロジックを行います。

あなたはどう思いますか?

+0

ふふ、私はちょうどだけでも正しい方法を行うにはない考えるためのいくつかのMVVM/XAMLの純粋主義者からのマイナスを取得したのですか? – Iceman

答えて

2

Cailburn.Microを試すことができます。これはWPF上で動作するオープンソースのフレームワークであり、複雑さのいくつかを隠しています。たとえば、コマンドクラスを単純なメソッド呼び出しで置き換えます。

ビューを実際に閉じる特別な結果を返すことで、ウィンドウクロージングを実装できます。そうすれば、期待した結果が返されていることを確認できるので、ViewModelは完全にユニットテスト可能であり、ビューを意識することはありません。ここで

がこれを実装する方法の例です:https://stackoverflow.com/a/10175228/258737

+0

いいフレームワークを使っているようですが、オープンな子ウィンドウのような単純なことをするためにフレームワークを実装する必要があるのだろうかと思います。 _native_方法はありませんか? – Iceman

関連する問題