2010-12-30 67 views
1

特定のコントロールにフォーカスがあるときにのみ有効にしたいコマンドがあります。私はルーティングされたコマンドとコマンドバインディングでこれを行うことができますが、私はViewModelの実装を維持したいと思います。WPFとMVVM:テキストボックスにViewModelの実装でフォーカスがある場合にのみコマンドを有効にしますか?

コードのコマンドバインディングとイベントハンドラは、唯一の方法の背後にありますか?

答えて

2

これをViewModelで処理するには、フォーカスを持つ「特定のコントロール」の概念をビューモデルに追加し、このフォーカス状態が変更されたときにコマンドを有効にする必要があります。ブール値IsCertainControlFocussedプロパティあなたのビューモデルに。

この状態を更新するには、2つのオプションがあります.GotFocusイベントとLostFocusイベントをコードの背後で処理し、ビューモデルでこのブール値プロパティを設定します。または、MVVMフレームワークの廃止メカニズムの1つを使用します。たとえば、MVVM LightフレームワークにはEventToCommandビヘイビアがあり、このプロパティを設定できるビューモデルによって公開されたコマンドにイベントを配線することができます。お使いのテクニック

http://geekswithblogs.net/lbugnion/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx

それはコードビハインドを持たないためにあなたにいかに重要であるかに依存します。個人的には、View Modelが適切な責任を持ち、テスト可能である限り、これを宗教的に追いかけることはありません。

関連する問題