WPF DataGrid-Button在列中,如何获取它在Click事件处理程序中出现的行?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我已将WPF Datagrid的itemsource设置为从我的DAL返回的对象列表。我还添加了一个包含按钮的额外列,下面是xaml。

<toolkit:DataGridTemplateColumn  MinWidth="100" Header="View">
    <toolkit:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Click="Button_Click">View Details</Button>
        </DataTemplate>
    </toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>

这呈现罚款。然而,在Button_Click方法,有没有什么办法可以获得按钮所在的datagrid上的行?更具体地说,我的对象的属性之一是“Id”,我希望能够将它传递给事件处理程序中另一个表单的构造函数。

private void Button_Click(object sender, RoutedEventArgs e)
    {
        //I need to know which row this button is on so I can retrieve the "id"  
    }

也许我需要在xaml中额外添加一些东西,或者我可以用迂回的方式来解决这个问题?

提问于
用户回答回答于

基本上,你的按钮将继承行数据对象的数据文本。我称之为MyObject,希望MyObject.ID是你想要的。

private void Button_Click(object sender, RoutedEventArgs e)
{
    MyObject obj = ((FrameworkElement)sender).DataContext as MyObject;
    //Do whatever you wanted to do with MyObject.ID
}
用户回答回答于

我喜欢这样做的另一种方法是将ID绑定到按钮的Command参数属性:

<Button Click="Button_Click" CommandParameter="{Binding Path=ID}">View Details</Button>

然后,你可以像这样在代码中访问它:

private void Button_Click(object sender, RoutedEventArgs e)
{
    object ID = ((Button)sender).CommandParameter;
}

扫码关注云+社区