0

アプリケーションに ListView コントロールがあり、CustomObject List< CustomObject > のコレクションにバインドされています。CustomObjectには別のビューがあります。この ListView には別のビュー モデルがあります。

コレクション List _customobject は、ListView ViewModel クラスに含まれています。

私のクエリ:

ユーザーが ListView の任意の行をダブルクリックしたときに、カスタム オブジェクトのプロパティを表示するビューを呼び出したいと考えています。ListView のダブルクリック コマンドは、ビュー モデルのListViewDoublClickコマンドにバインドされています。CustomObject は、リストビュー ダブルクリック コマンドのイベント引数にあります。これを実現するには、カスタム オブジェクト (またはコレクションからカスタム オブジェクトを取得できるカスタム オブジェクトの一意の id プロパティ) をコマンド パラメーターとして渡す必要があります。

解決策を教えてください!!

4

1 に答える 1

2

これを行う最も簡単な方法は、リストにダブルクリック イベント ハンドラーを追加することです。覚えておいてください: MVVM は、ビューにコードがないという意味ではありません! これは、ビューがビューの問題のみを処理することを意味します。EventArgs はビューにとってのみ意味があるという非常に良い議論をすることができます。それを ViewModel に渡したい場合は、関連する情報のみを渡す必要があります。EventArgs からデータを抽出して ViewModel に渡すようなことをしなければならない場合、それは受け入れられ、適切であり、EventArgs を ViewModel に渡すよりも優れています。

(この点については意見の相違があると思いますが、UI インタラクションを扱うことは View の問題であり、別の方法として動作を記述したり、フレームワークを使用して単一のコントロールを単一のページで動作させたりする場合は、覚えておいてください: YAGNIパターンは宗教ではありません。)

MVVM フレームワークのいくつかでは、これを行うことができます (ただし、それが良いアイデアかどうかについては多くの議論があります)。特に、MVVM Light Toolkitはドラッグ アンド ドロップをサポートするために少し前にこれを追加しました (ブログ投稿を正しく覚えていれば)。

MVVM フレームワークを使用していない場合は、複数の場所で同じことを行う場合に、これを実行できるようにするための動作を作成しました。この場合、私は通常、EventArgs から関心のある情報を抽出します (つまり、完全なイベント引数は実際には必要ないかもしれませんが、クリックされたアイテムと他のいくつかのデータはおそらく気にするでしょう)。

于 2010-03-21T13:22:04.607 に答える