在MVVM中处理MouseLeftButtonDown

Kun*_*esh 4 wpf xaml mvvm mouseevent controltemplate

我的XAML是:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate>
            <Image Source="X.png" HorizontalAlignment="Left"
                                 Width="20" Height="20" 
                                 MouseLeftButtonDown="Image_MouseLeftButtonDown"/>
        </ControlTemplate>
    </Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)

现在我关注MVVM.我需要更改代码以使其与ViewModel一起使用.如何MouseLeftButtonDown使用ViewModel 处理事件?

Bla*_*hma 5

使用MVVM时:View中的触发器(无论是MouseLeftDown,MouseHover等)在ViewModel中触发命令.
这些命令在ViewModel中执行某些操作,如果此命令更改了视图中绑定的任何数据,则可以在视图中查看结果.

因此,不要问"如何使用视图模型处理MouseLeftButtonDown事件"而是决定在ViewModel中要执行的操作(例如从列表框中删除项目,导航到另一个视图,刷新数据等等... )并为它创建一个特定的命令.

MouseLeftDown可以触发该命令......但是究竟做了什么不应该是视图的一部分......

以下是使用MVVM和仅使用XAML捕获鼠标事件和运行命令的示例.


Mat*_*nem 3

在我看来,鼠标左键不应该由“MVVM”处理(由绑定处理)。它与模型无关,因为它与 UI 体验相关。

为此,我将在代码隐藏中附加到“老式”MouseRightButtonDown 事件,然后在视图中触发命令或方​​法。因为模型不需要知道命令是如何执行的。按钮点击、鼠标手势和菜单都与 UI 相关。

最起码,我是这么想的 :-)