4

私のXAMLは次のとおりです。

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate>
            <Image Source="X.png" HorizontalAlignment="Left"
                                 Width="20" Height="20" 
                                 MouseLeftButtonDown="Image_MouseLeftButtonDown"/>
        </ControlTemplate>
    </Setter.Value>
</Setter>

今、私はMVVMに従っています。ViewModel で動作するようにコードを変更する必要があります。MouseLeftButtonDownViewModel でイベントを処理するにはどうすればよいですか?

4

2 に答える 2

5

MVVM を使用する場合: ビュー内のトリガー (MouseLeftDown、MouseHover など)は、ViewModel 内のコマンドをトリガーします。
これらのコマンドは、ViewModel で何らかの操作を実行します。このコマンドがビューにバインドされているデータを変更すると、ビューで結果を確認できます。

したがって、「View Model で MouseLeftButtonDown イベントを処理するにはどうすればよいですか」と尋ねるのではなく、ViewModel で何をしたいのか (リストボックスから項目を削除する、別のビューに移動する、データを更新するなど) を決定してください。 )、そのための特定のコマンドを作成します。

MouseLeftDown はそのコマンドをトリガーできます...しかし、正確に行われることはビューの一部であってはなりません...

MVVM と XAML のみを使用して、マウス イベントをキャッチし、コマンドを実行する例を次に示します。

于 2013-01-02T08:32:21.053 に答える
3

私の意見では、マウスの左ボタンは "MVVM" (バインディングによって処理される) によって処理されるべきではありません。UI エクスペリエンスに関連しているため、モデルと関係があることに注意してください。

そのための分離コードで「昔ながらの」MouseRightButtonDown イベントにアタッチし、ビューでコマンドまたはメソッドを起動します。モデルはコマンドがどのように実行されたかを知る必要がないためです。ボタンのクリック、マウス ジェスチャ、およびメニューは UI 関連です。

少なくとも私の意見では:-)

于 2013-01-02T08:31:56.093 に答える