MVVM如何在画布中绑定MouseLeftButtonDown和MouseLeftButtonUp

时间:2019-02-14 13:17:53

标签: c# wpf canvas mvvm binding

我试图在用户单击画布后将其添加到我的画布中。我想在拖动圆的同时更改圆的位置。 我想用MVVM来做,但是不知道如何在ViewModel中捕获这些事件。 我需要一个MouseLeftButtonUp / Down

我已经尝试了System.Windows.Interactivity,但是它没有帮助。 我唯一的想法是添加不可见按钮并轻松绑定Command="{Binding Method}",但仍然无法解决我的问题,当然这不是最佳选择

这在我的XAML代码中(部分)

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

        <Canvas x:Name="DrawableCanvas" HorizontalAlignment="Left" Height="{Binding ElementName=GridContainer, Path=ActualHeight}"  VerticalAlignment="Top" Width="{Binding ElementName=GridContainer, Path=ActualWidth}" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown">
                    <i:InvokeCommandAction Command="{Binding CanvasActionCommand}" x:Name="interactifityFix2">
                    </i:InvokeCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Canvas>

1 个答案:

答案 0 :(得分:0)

在您的XAML中添加此命名空间:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

然后您可以添加一个交互触发器,将事件与viemodel中的icommand合并,如下所示:

 <Ellipse>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="PreviewMouseDown">
            <i:InvokeCommandAction Command="{Binding MouseDownCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Ellipse>