【问题标题】:MVVM How bind MouseLeftButtonDown and MouseLeftButtonUp in CanvasMVVM 如何在 Canvas 中绑定 MouseLeftButtonDown 和 MouseLeftButtonUp
【发布时间】:2019-02-14 13:17:52
【问题描述】:

我试图在用户点击后将新的孩子(圆圈)添加到我的画布中。我想在拖动圆圈时改变它们的位置。 我想用 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>

【问题讨论】:

    标签: c# wpf canvas mvvm binding


    【解决方案1】:

    在你的 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>
    

    【讨论】:

    • 我添加了对 System.Windows.Interactivity 的引用,然后添加了您的代码(用于椭圆和画布)。但点击仍然不起作用。 public ICommand CanvasActionCommand { get { return new RelayCommand(o =&gt; CanvasAction()); } }我的方法 CanvasAction 它没有执行
    • 是的,但您需要提前设置 DataContext 以允许在一般情况下进行绑定,例如 this.datacontext = viewmodel 左右
    • 你必须在你的代码中设置你的数据上下文作为你在其中声明 icommand 的类另外我的代码没有为椭圆设置任何属性,所以它的大小将为 0,你将无法点击它你修改了吗?
    • 我不使用后面的代码,但我的 XAML 中有数据上下文
    • 应该也可以!您确定您在视图和视图模型中编写的命令完全相同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多