目录

删除ListView(ListBox)中Binding的item

目录

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

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

【方案一】

 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();
	}
}