最近在開發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
}
效果圖