WPF DataGrid – 列中的button,从Click事件处理程序中获取它所在的行

我已经将WPF Datagrid的itemsource设置为从我的DAL返回的对象列表。 我还添加了一个包含button的额外列,下面是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方法,有没有什么办法可以得到button所在的数据网格上的行? 更具体地说,我的对象的属性之一是“ID”,我希望能够传递到事件处理程序中的另一种forms的构造函数。

 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中额外添加一些东西,或者我可以用迂回的方式来解决这个问题? 任何帮助/build议表示赞赏。

基本上你的button将inheritance行数据对象的datacontext。 我称之为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绑定到button的CommandParameter属性上:

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

那么你可以像这样在代码中访问它:

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

另一种绑定到命令参数DataContext和尊重MVVM的方式,比如Jobi Joy说buttoninheritancedatacontext表格行。

XAML中的button

 <RadButton Content="..." Command="{Binding RowActionCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext}"/> 

命令实现

 public void Execute(object parameter) { if (parameter is MyObject) { } } 
 MyObject obj= (MyObject)((Button)e.Source).DataContext; 

如果你的DataGrid的DataContext是一个DataView对象(DataTable的DefaultView属性),那么你也可以这样做:

 private void Button_Click(object sender, RoutedEventArgs e) { DataRowView row = (DataRowView)((Button)e.Source).DataContext; }