Establecí el origen de elementos de mi WPF Datagrid en una Lista de objetos devueltos desde mi DAL. También agregué una columna adicional que contiene un botón, el xaml está debajo.
<toolkit:DataGridTemplateColumn MinWidth="100" Header="View">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="Button_Click">View Details</Button>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
Esto queda bien. Sin embargo, en el método Button_Click , ¿hay alguna forma de que pueda obtener la fila en la cuadrícula de datos donde reside el botón? Más específicamente, una de las propiedades de mis objetos es "Id", y me gustaría poder pasar esto al constructor de otro formulario en el controlador de eventos.
private void Button_Click(object sender, RoutedEventArgs e)
{
//I need to know which row this button is on so I can retrieve the "id"
}
¿Quizás necesito algo extra en mi xaml, o quizás estoy haciendo esto de una manera indirecta? Se agradece cualquier ayuda / consejo.
Otra forma en que me gusta hacer esto es vincular el ID a la propiedad CommandParameter del botón:
Entonces puede acceder a él así en el código:
fuente
CommandParameter
puede no ser el uso previsto de la propiedad, pero semánticamente, es más significativo que usarTag
y más simple que recuperar el ID del objeto vinculado en el controlador. Si prefiere los comandos, ese enfoque está bien, pero ¿por qué agregar la complejidad si no lo va a usar?Otra forma que se une al parámetro de comando DataContext y respeta MVVM como Jobi Joy dice que el botón hereda la fila de formulario de contexto de datos.
Botón en XAML
Implementación de comandos
fuente
fuente
Si el DataContext de su DataGrid es un objeto DataView (la propiedad DefaultView de un DataTable), también puede hacer esto:
fuente
e.OriginalSource
. en lugar dee.Source
.