Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在MVVM中处理MouseLeftButtonDown_Wpf_Xaml_Mvvm_Mouseevent_Controltemplate - Fatal编程技术网

Wpf 在MVVM中处理MouseLeftButtonDown

Wpf 在MVVM中处理MouseLeftButtonDown,wpf,xaml,mvvm,mouseevent,controltemplate,Wpf,Xaml,Mvvm,Mouseevent,Controltemplate,我的XAML是: <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Image Source="X.png" HorizontalAlignment="Left" Width="20" Height="20"

我的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
事件?

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

为此,我将附加到codebehind中的“老式”MouseRightButtonDown事件,然后在视图中启动命令或方法。 因为模型不需要知道命令是如何执行的。按钮点击、鼠标手势和菜单与用户界面相关


至少在我看来:-)

使用MVVM时:视图中的触发器(可以是鼠标悬停、鼠标悬停等)会触发ViewModel中的
这些命令在ViewModel中执行某些操作,如果此命令更改视图中绑定的任何数据,则可以在视图中看到结果

因此,不要问“如何使用视图模型处理MouseLeftButtonDown事件”,而是要决定在ViewModel中要做什么(例如从列表框中删除项目、导航到另一个视图、刷新数据等),并为其创建特定命令

鼠标悬停可以触发该命令。。。但到底做了什么不应该成为观点的一部分


捕捉鼠标事件并运行命令,只使用MVVM和XAML。

无需做什么,左键单击需要代码支持。阅读[WPF和MVVM.Binding事件][1][1]: