WPF ListView点击删除某一行并获取绑定数据

时间:2022-01-14 21:13:06

最近在开发WPF程序时遇到一个问题,在gridview中希望实现在每一行最后添加一个删除的按钮,但是发现点击每行的button时只会触发button的点击事件,并没有选中这一行,此时调用list.SelectedItem时无法得到对应的绑定数据。

UI.xaml

<ListView x:Name="list" Height="494" Width="1121" FontSize="16" >
<ListView.View>
 <GridView x:Name="grideView" >
<GridViewColumn Header="产 品 名 称" Width="Auto" DisplayMemberBinding="{Binding Path=productName}"/>
<GridViewColumn Header="产 品 类 型" Width="Auto" DisplayMemberBinding="{Binding Path=productType}"/>
<GridViewColumn Header="产 品 大 类" Width="Auto" DisplayMemberBinding="{Binding Path=productCategory}" />
<GridViewColumn Header="产 品 规 格" Width="Auto" DisplayMemberBinding="{Binding Path=productSpec}"/>
<GridViewColumn Header="产 品 数 量" Width="Auto" DisplayMemberBinding="{Binding Path=number}"/>
<GridViewColumn Header="价 格" Width="Auto" DisplayMemberBinding="{Binding Path=productMoney}"/>
<GridViewColumn Header="操 作" Width="Auto" >                                <GridViewColumn.CellTemplate>
        <DataTemplate>
         <Button x:Name="BtnDelete" Background="{x:Null}" BorderBrush="{x:Null}" Click="BtnDelete_Click" >
         <Image Source="/images/error.png" />
         </Button>
        </DataTemplate>                              </GridViewColumn.CellTemplate>
</ListView.View>
</ListView>

UI.cs

/** * 删除按钮监听事件 * */
private void BtnDelete_Click(object sender, RoutedEventArgs e)
{ 
        //设置girid的选中元素为Button所在行的元素
        list.SelectedItem = ((Button)sender).DataContext;
        //在数据集合中删除此元素 
        mItemsSource.RemoveAt(list.SelectedIndex);        
        list.Items.Refresh();//刷新listview
}

效果图
WPF ListView点击删除某一行并获取绑定数据