删除ListView(ListBox)中Binding的item

使用EF框架并在在ListView或ListBox中binding了数据源,每一行数据都对应一个删除按钮,点击这个按钮就删除对应的那条数据。

看似简单的功能也能玩出新花样,下面提供两种方案:

【方案一】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ListBox FontSize="20" SelectionMode="Single" ItemsSource="{Binding XX}" >
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<Button Width="25" DockPanel.Dock="Right" Height="25" Style="{x:Null}" Tag="{Binding}" Background="{x:Null}" BorderBrush="{x:Null}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction MethodName="Del" TargetObject="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<TextBlock x:Name="txtContent" DockPanel.Dock="Left" TextAlignment="Center" Text="{Binding xx,Mode=TwoWay}" />
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
1
2
3
4
5
6
7
8
9
10
11
12
13
public void Del(object sender, RoutedEventArgs e)
{
if (sender != null && sender is Button)
{
if (((Button)sender).Tag != null && ((Button)sender).Tag is XX)
{
if (Utils.ShowMessage(this, "确定要删除吗?", "警告", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
DelOper();
}
}
}
}

这是通过使用Button的Tag属性Binding到对应的这条数据上,在后台获取sender转成Button并获取Tag属性从而读取到对应的数据,再通过删除方法处理即可。

【方案二】

如果使用EF实体框架,则可以使用下面的方法。

1
2
3
4
5
6
<Button Width="25" Height="25" Style="{x:Null}" Background="{x:Null}" BorderBrush="{x:Null}">                                                                         <i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction MethodName="Del" TargetObject="{Binding Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>

将Button的Click事件导向到EF对应的数据类型中,给这个类型添加Del方法就可以了。相对第一种方法,这种方法更简单方便。

1
2
3
4
5
6
7
public partial class XX
{
public void Del()
{
DelOper();
}
}

删除ListView(ListBox)中Binding的item

https://wurang.net/how_to_del_binding_item_in_listview/

作者

Wu Rang

发布于

2014-02-21

更新于

2021-12-06

许可协议

评论