小生QQB 2023-07-01 15:10 采纳率: 50%
浏览 16
已结题

WPF MVVM DataGrid 按钮列的命令绑定

WPF DataGrid 按钮列 命令如何绑定鼠标按下与松开事件?如下并未成功,请懂的哥们指教。

                    <DataGridTemplateColumn Header="Jog-">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate DataType="model:AxisKeyValueItem">
                                <Button Content="Jog-" Width="60" Margin="5,0"  Style="{StaticResource ButtonPrimary}">
                                    <hc:Interaction.Triggers>
                                        <hc:EventTrigger EventName="MouseDown">
                                            <hc:EventToCommand Command="{Binding Path=DataContext.MoveJogReduceCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding }"></hc:EventToCommand>
                                        </hc:EventTrigger>
                                        <hc:EventTrigger EventName="MouseUp">
                                            <hc:EventToCommand Command="{Binding Path=DataContext.MoveStopCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding }"></hc:EventToCommand>
                                        </hc:EventTrigger>
                                    </hc:Interaction.Triggers>
                                </Button>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>


  • 写回答

1条回答 默认 最新

  • 盒子猫君 2023-07-01 15:43
    关注

    在WPF DataGrid中,要绑定按钮列的鼠标按下和松开事件,可以使用类似于您提供的代码来实现。用到了Interaction.Triggers和EventTrigger的功能。

    根据您提供的代码,看起来已经使用了Interaction.Triggers和EventTrigger,但似乎没有完全正确地绑定鼠标按下和松开事件。

    以下是修改后的示例代码,演示如何正确绑定鼠标按下和松开事件:

    <DataGridTemplateColumn Header="Jog-">
    <DataGridTemplateColumn.CellTemplate>
    <DataTemplate DataType="model:AxisKeyValueItem">
    <Button Content="Jog-" Width="60" Margin="5,0" Style="{StaticResource ButtonPrimary}">
    <i:Interaction.Triggers>
    <i:EventTrigger EventName="PreviewMouseDown">
    <i:InvokeCommandAction Command="{Binding Path=DataContext.MoveJogReduceCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding }"/>
    </i:EventTrigger>
    <i:EventTrigger EventName="PreviewMouseUp">
    <i:InvokeCommandAction Command="{Binding Path=DataContext.MoveStopCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding }"/>
    </i:EventTrigger>
    </i:Interaction.Triggers>
    </Button>
    </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    
    
    

    请注意,上述示例中使用了i:前缀,这需要将命名空间xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"添加到XAML页面的根元素。

    修改后的代码将鼠标按下和松开事件更改为PreviewMouseDownPreviewMouseUp,这是WPF中预览事件的常用命名。另外,还将Interaction.Triggers更改为i:Interaction.Triggers,并使用i:InvokeCommandAction来触发命令。

    通过这样的修改,现在按钮列将正确绑定鼠标按下和松开事件,并将对应的命令触发,并传递绑定的对象作为命令参数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月11日
  • 已采纳回答 7月3日
  • 创建了问题 7月1日

悬赏问题

  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
  • ¥15 QTOF MSE数据分析