2011-09-05 13 views
5

Chcę mieć przycisk w każdym wierszu widoku GridView, aby wykonać akcje w tym wierszu. Mogę uzyskać kliknięcie, ale jak określić, do którego wiersza należy ten przycisk?Przycisk w GridView: Skąd mam wiedzieć, który element?

Co mam w tej chwili jest tak:

 <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 
    } 

Czy jest może jakiś sposób powiązać pozycję na tym samym wierszu RoutedEventArgs?

+0

Co o sprawdzenie wybranego właściwość elementu siatki? –

+0

Nie wiem WPF, ale asp.net ma zdarzenie OnCommand, w którym można określić argumenty CommandName i CommandType, które zostaną przekazane do zdarzenia obsługi. –

Odpowiedz

5

DataContext z klikniętego Button będzie pozycja szukasz

Zakładając swoją klasę źródłowy jest Calibration

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

Innym sposobem jest użycie Command zamiast zdarzenia Click . Pozwoliłoby to wiązać CommandParameter jak tego

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

Przykłady tego można znaleźć w całej sieci, tutaj jest jeden: Pass Command Parameter to RelayCommand

+0

Dziękuję, dokładnie to, czego szukałem. – MTR

0

Co powiesz na używanie zdarzenia OnSelectedIndexChanged w GridView?

public void Grid_selectedIndexChanged(Object sender, EventArgs e) 
{ 
    GridViewRow row = Grid.SelectedRow; 
} 
Powiązane problemy