GridView中的按钮:我如何知道哪个项目?

MTR*_*MTR 5 c# wpf binding 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
    }
Run Code Online (Sandbox Code Playgroud)

是否有某种方法可以将此行上的项绑定到RoutedEventArgs?

Fre*_*lad 5

DataContext所点击的Button将是你正在寻找的项目

假设您的源类是 Calibration

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

另一种方法是使用Command而不是Click事件.这将允许您CommandParameter像这样绑定

<Button Command="{Binding MyCommand}"
        CommandParameter="{Binding}"/>
Run Code Online (Sandbox Code Playgroud)

这个例子可以在网上找到,这里有一个:将命令参数传递给RelayCommand