2011-09-05 60 views
5

我想在GridView的每一行都有一个按钮来在这一行上执行操作。我能够获得点击,但是如何确定此按钮属于哪个行?GridView中的按钮:我如何知道哪个项目?

我目前所面对的是这样的:

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

是否有可能到该项目结合该行的RoutedEventArgs某种方式?

+0

有关检查所选项目属性网格是什么? –

+0

不知道WPF,但asp.net有一个OnCommand事件,您可以指定CommandName和CommandType参数传入处理程序的eventargs。 –

回答

5

的点击ButtonDataContext将是你正在寻找

假设你的源类的产品Calibration

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

另一种方法是使用一个Command代替Click事件。这将允许你绑定CommandParameter这样

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

这方面的例子都可以在网上找到,这里是一个:Pass Command Parameter to RelayCommand

+0

谢谢,我正在寻找什么。 – MTR

0

如何在GridView上使用OnSelectedIndexChanged changed事件?

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