2011-09-05 6 views
5

Quiero tener un botón en cada fila de un GridView para realizar acciones en esta fila. Puedo obtener el clic, pero ¿cómo puedo determinar a qué fila pertenece este botón?Botón en GridView: ¿Cómo sé qué artículo?

Lo que tengo en este momento es la siguiente:

 <ListView ItemsSource="{Binding Calibrations}"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn Header="Voltage [kV]" Width="70" DisplayMemberBinding="{Binding Voltage}" /> 
        <GridViewColumn Header="Filter" Width="100" DisplayMemberBinding="{Binding FilterName}" /> 
        <GridViewColumn Header="Calibration Date" Width="100" DisplayMemberBinding="{Binding CalibrationDate}" /> 
        <GridViewColumn Header="Calibration" Width="60"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Button Content="Start" Click="OnStart" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 


     private void OnStart(object sender, RoutedEventArgs e) 
    { 
     // how do I know, on which item this button is 
    } 

¿Existe tal vez una cierta manera de unir el elemento en esta fila para los RoutedEventArgs?

+0

¿Qué pasa con el control de la cuadrícula seleccionada propiedad del elemento? –

+0

No conozco WPF, pero asp.net tiene un evento OnCommand que puede especificar los argumentos CommandName y CommandType que pasan a los eventargs del controlador. –

Respuesta

5

El DataContext del Button seleccionada será el elemento que busca

Asumiendo que su clase de origen es Calibration

private void OnStart(object sender, RoutedEventArgs e) 
{ 
    Button button = sender as Button; 
    Calibration clickedCalibration = button.DataContext as Calibration; 
    // ... 
} 

Otra forma es utilizar un Command lugar del evento Click . Esto le permitiría enlazar CommandParameter como éste

<Button Command="{Binding MyCommand}" 
     CommandParameter="{Binding}"/> 

Ejemplos de esto se pueden encontrar por toda la red, aquí es una: Pass Command Parameter to RelayCommand

+0

Gracias, exactamente lo que estaba buscando. – MTR

0

¿Qué le parece usar un evento cambiado OnSelectedIndexChanged en su GridView?

public void Grid_selectedIndexChanged(Object sender, EventArgs e) 
{ 
    GridViewRow row = Grid.SelectedRow; 
} 
Cuestiones relacionadas