MVVM中如何处理鼠标左键按下事件

5

我的 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配合工作。如何使用ViewModel处理MouseLeftButtonDown事件?


没有什么可做的,你需要编写代码来处理左键单击事件。请阅读WPF和MVVM。绑定事件 - zzfima
2个回答

5
当使用MVVM模式时:视图中的触发器(例如MouseLeftDown、MouseHover等)会触发ViewModel中的Command。这些命令在ViewModel中执行某些操作,如果此命令更改了绑定在视图中的任何数据,则可以在视图中看到结果。
因此,不要问“如何使用ViewModel处理MouseLeftButtonDown事件”,而是决定在ViewModel中想要做什么(例如从listbox中删除项目、导航到另一个视图、刷新数据等),并为其创建一个特定的命令。
MouseLeftDown可以触发该命令...但具体要做什么不应该成为视图的一部分... 以下是一个示例,演示如何使用MVVM和仅限XAML来捕获鼠标事件并运行命令。

3
在我看来,“MVVM”不应该处理左键鼠标(应该通过绑定方式进行处理)。因为这与UI体验有关,而与模型无关。
我会在代码后台附加到“老式”的MouseRightButtonDown事件,然后在视图中触发命令或方法。因为模型不需要知道如何执行命令。按钮点击、鼠标手势和菜单都是与UI相关的。
至少在我看来是这样的 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接