2016-08-17 6 views
0

私はこれを理解することはできません。MVVMでViewModelsでCommandingを使用する理由は何ですか?

は時々、しかし、ビューはViewModelにで さまざまなアクションをトリガーするボタンが含まれている必要があります。 しかし、それは特定のユーザー・インタフェース・パラダイムにViewModelに を結ぶなるためのViewModelはボタンの のClickedハンドラを含めることはできません。

指揮の理由は何ですか?

+0

この理由のごく短い例は、 'ButtonLogicOperation_OnClick(object sender、RoutedEventArgs e)'の 'LogicOperation()'メソッドのインスタンスをあなたのビューモデル。 – Sam

答えて

1

のClickedハンドラは、一般的にコントロールによって作成されたイベントです。ハンドラは実際に使用するコントロールに固有のものです。たとえば、特定のイベントハンドラとイベントを使用して独自のユーザーコントロールを作成することができます。

問題はあなたのビューの実装を使用してビューモデルを区切るしたいということです。ビューに強制的にコントロールを使用させたくない場合は、ListまたはObservableCollectionListViewListBoxDataGridなどで表示できます。つまり、クリックハンドラまたはハンドラを使用すると、ビューの使用や返却が強制されますこれらのハンドラー。 ビューとビューモデルの間の依存関係はです。

その結果、我々は代わりに指揮を使用しています。ほとんどのコントロールでは、状況が発生したとき(クリック、ドラッグ、ドロップなど)にコマンドを使用してコマンドイベントを送信できるため、この依存関係は削除されます。

1

私は私自身の経験から、あなたに実用的な答えを与えるためにしようとするでしょう:

  • あなたのコードがテスト可能作る:、あなたが「ユニットテスト」についての詳細を読むことができますが、基本的に、彼らはコードで記述されたシナリオがあり、これらのシナリオでは、結果を前提としています。 これらの「テスト」はC#コードなので、ページにアクセスしてボタンをクリックして結果をテストする方法はありません。しかし一方で、ViewModelをインスタンス化してコマンドを実行することができます。
  • 適切な方法でViewModelを作成すると、UWP(電話、タブレット、desktop.hololense、IOT)、Xamarin(iOS、Android、MacOSX)という異なるプラットフォームの異なるプロジェクトでこれらのViewModelを再利用できます。
  • データをサーバーに送信するクリックイベント(コードの背後にある)があるこのページを作成しているとします。同じメソッドを呼び出すが、今度はユーザーがキーボードの「Enter」を押した場合にはどうなるでしょうか。コマンドで、ViewModelの適​​切なイベントにコマンドを簡単にバインドできます。
関連する問題