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 一起使用。如何MouseLeftButtonDown使用 ViewModel 处理事件?

4

2 回答 2

5

使用 MVVM 时:视图中的触发器(例如 MouseLeftDown、MouseHover 等)会触发 ViewModel 中的命令
这些命令在 ViewModel 中执行一些操作,如果此命令更改了视图中绑定的任何数据,您可以在视图中看到结果。

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

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

这是一个使用 MVVM 并且仅使用 XAML 捕获鼠标事件并运行命令的示例。

于 2013-01-02T08:32:21.053 回答
3

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

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

至少在我看来 :-)

于 2013-01-02T08:31:56.093 回答