2011-09-05 5 views
5

Tôi muốn có một nút trong mỗi hàng của GridView để thực hiện các hành động trên hàng này. Tôi có thể nhận được nhấp chuột, nhưng làm cách nào để xác định hàng nào thuộc về nút này?Nút trong GridView: Làm cách nào để biết Mục nào?

Những gì tôi có vào lúc này đây là:

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

Có lẽ một số cách để ràng buộc các mục trên hàng này để các RoutedEventArgs?

+0

gì về việc kiểm tra Grid chọn sở hữu mục? –

+0

Không biết WPF nhưng asp.net có một sự kiện OnCommand mà bạn có thể chỉ định các đối số CommandName và CommandType được chuyển vào Eventarg của trình xử lý. –

Trả lời

5

Các DataContext của nhấp Button sẽ là mục mà bạn đang tìm kiếm

Giả sử lớp nguồn của bạn là Calibration

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

Một cách khác là sử dụng một Command thay vì các sự kiện Click . Điều này sẽ cho phép bạn để ràng buộc CommandParameter như thế này

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

Ví dụ về điều này có thể được tìm thấy khắp nơi trên mạng, đây là một trong: Pass Command Parameter to RelayCommand

+0

Cảm ơn bạn, chính xác những gì tôi đang tìm kiếm. – MTR

0

Cách sử dụng sự kiện OnSelectedIndexChanged đã thay đổi trên GridView của bạn?

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