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