将按钮绑定到 DataGrid WPF 中的对象

Posted

技术标签:

【中文标题】将按钮绑定到 DataGrid WPF 中的对象【英文标题】:Bind a Button to an object in DataGrid WPF 【发布时间】:2015-03-27 03:30:18 【问题描述】:

我正在构建一个 WPF 应用程序,其中包含将商品添加到购物车的操作。如下定义的DataGrid 绑定到Products 的集合,并且每行都有一个Button。现在,当单击Button 时,我如何知道哪个 Product 对象是针对的?

<DataGrid Grid.Row="1" ItemsSource="Binding " IsReadOnly="True" IsSynchronizedWithCurrentItem="True" 
              AutoGenerateColumns="False" TextBlock.FontSize="20" CanUserSortColumns="True" CanUserAddRows="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Header 1" Binding="Binding ID" Width="2*" SortMemberPath="Binding ID"/>
        <DataGridTextColumn Header="Header 2" Binding="Binding Name" Width="2*" SortMemberPath="Binding Name"/>

        <DataGridTemplateColumn Header="Add To Cart" Width="2*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="Click To Add"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

【问题讨论】:

你想用 MVVM 方式做吗? ***.com/questions/1168976/… @paul,谢谢。刚刚也看到了那个帖子。 @Sajeetharan paul 的链接给了我一个很好的解决方案。只是好奇,MVVM 的方式是怎样的? 我认为你可以重写 Product 类并有一个方法来处理 buttonClick。因此,当您为 datagridrowButtonClick 创建命令时,它将绑定到您在 ProductClass 中的方法 【参考方案1】:

您可以将 Product 绑定到 TagButton 属性,如下所示:

<Button Content="Click To Add" Tag="Binding"/>

您将通过以下方式获得原始实体:

Product product = button.Tag as Product

【讨论】:

以上是关于将按钮绑定到 DataGrid WPF 中的对象的主要内容,如果未能解决你的问题,请参考以下文章

wpf中的datagrid绑定操作按钮是否显示或者隐藏

将内部datagrid数据与外部datagrid wpf绑定

如何防止 ComboBox 中的 NewItemPlaceholder 行绑定到与 WPF 中的 DataGrid 相同的 DataTable

WPF DataGrid 单元格绑定到域对象中属性的属性未更新

从 WPF DataGrid 中的按钮触发 RelayCommand

WPF:将列表动态绑定到(某些)对象的属性