我在wpf中有一个datagrid,每行有一个编辑按钮。如何获得焦点的行索引,即单击编辑按钮的行?
答案 0 :(得分:0)
如果您的商品是唯一的,则可以在您的收藏集中使用IndexOf(item)
检索索引。所以,你基本上需要你的物品和你的收藏品,那么你很高兴。
您可以通过提供DataGrid
名称轻松地在代码后面访问该集合。对于该项目,您可以从Button
到DataGridRow
遍历可视树,然后使用其DataGridRow.Item
属性。
<DataGrid x:Name="dataGrid1" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Button Column">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="Button_Click" Content="Edit"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我假设网格的DataContext
是项目集合。
在代码后面,处理Button_Click
事件。我使用辅助方法递归地找到DataGridRow
。
private void Button_Click(object sender, RoutedEventArgs e)
{
var row = GetParent<DataGridRow>((Button)sender);
var index = dataGrid1.Items.IndexOf(row.Item);
MessageBox.Show("Index = " + index, "Clicked Value");
}
private TargetType GetParent<TargetType>(DependencyObject o)
where TargetType : DependencyObject
{
if (o == null || o is TargetType) return (TargetType)o;
return GetParent<TargetType>(VisualTreeHelper.GetParent(o));
}
这应该会显示一个消息框,显示列的索引。
但是,在大多数情况下,人们实际上并不需要索引,而是希望访问索引后面的项目。在这种情况下,只需忘记IndexOf
部分,然后按原样row.Item
。